!function e(t, n, r) {
    function o(a, s) {
        if (!n[a]) {
            if (!t[a]) {
                var u = "function" == typeof require && require;
                if (!s && u)return u(a, !0);
                if (i)return i(a, !0);
                var l = new Error("Cannot find module '" + a + "'");
                throw l.code = "MODULE_NOT_FOUND", l
            }
            var c = n[a] = {exports: {}};
            t[a][0].call(c.exports, function (e) {
                var n = t[a][1][e];
                return o(n ? n : e)
            }, c, c.exports, e, t, n, r)
        }
        return n[a].exports
    }

    for (var i = "function" == typeof require && require, a = 0; a < r.length; a++)o(r[a]);
    return o
}({
    1: [function (e, t, n) {
        !function (e, n) {
            "use strict";
            "object" == typeof t && "object" == typeof t.exports ? t.exports = e.document ? n(e, !0) : function (e) {
                if (!e.document)throw new Error("jQuery requires a window with a document");
                return n(e)
            } : n(e)
        }("undefined" != typeof window ? window : this, function (e, t) {
            "use strict";
            function n(e, t) {
                t = t || te;
                var n = t.createElement("script");
                n.text = e, t.head.appendChild(n).parentNode.removeChild(n)
            }

            function r(e) {
                var t = !!e && "length" in e && e.length, n = de.type(e);
                return "function" !== n && !de.isWindow(e) && ("array" === n || 0 === t || "number" == typeof t && t > 0 && t - 1 in e)
            }

            function o(e, t, n) {
                return de.isFunction(t) ? de.grep(e, function (e, r) {
                    return !!t.call(e, r, e) !== n
                }) : t.nodeType ? de.grep(e, function (e) {
                    return e === t !== n
                }) : "string" != typeof t ? de.grep(e, function (e) {
                    return ae.call(t, e) > -1 !== n
                }) : ke.test(t) ? de.filter(t, e, n) : (t = de.filter(t, e), de.grep(e, function (e) {
                    return ae.call(t, e) > -1 !== n && 1 === e.nodeType
                }))
            }

            function i(e, t) {
                for (; (e = e[t]) && 1 !== e.nodeType;);
                return e
            }

            function a(e) {
                var t = {};
                return de.each(e.match(qe) || [], function (e, n) {
                    t[n] = !0
                }), t
            }

            function s(e) {
                return e
            }

            function u(e) {
                throw e
            }

            function l(e, t, n) {
                var r;
                try {
                    e && de.isFunction(r = e.promise) ? r.call(e).done(t).fail(n) : e && de.isFunction(r = e.then) ? r.call(e, t, n) : t.call(void 0, e)
                } catch (e) {
                    n.call(void 0, e)
                }
            }

            function c() {
                te.removeEventListener("DOMContentLoaded", c), e.removeEventListener("load", c), de.ready()
            }

            function f() {
                this.expando = de.expando + f.uid++
            }

            function p(e) {
                return "true" === e || "false" !== e && ("null" === e ? null : e === +e + "" ? +e : Ie.test(e) ? JSON.parse(e) : e)
            }

            function h(e, t, n) {
                var r;
                if (void 0 === n && 1 === e.nodeType)if (r = "data-" + t.replace(Re, "-$&").toLowerCase(), n = e.getAttribute(r), "string" == typeof n) {
                    try {
                        n = p(n)
                    } catch (e) {
                    }
                    Pe.set(e, t, n)
                } else n = void 0;
                return n
            }

            function d(e, t, n, r) {
                var o, i = 1, a = 20, s = r ? function () {
                        return r.cur()
                    } : function () {
                        return de.css(e, t, "")
                    }, u = s(), l = n && n[3] || (de.cssNumber[t] ? "" : "px"),
                    c = (de.cssNumber[t] || "px" !== l && +u) && $e.exec(de.css(e, t));
                if (c && c[3] !== l) {
                    l = l || c[3], n = n || [], c = +u || 1;
                    do i = i || ".5", c /= i, de.style(e, t, c + l); while (i !== (i = s() / u) && 1 !== i && --a)
                }
                return n && (c = +c || +u || 0, o = n[1] ? c + (n[1] + 1) * n[2] : +n[2], r && (r.unit = l, r.start = c, r.end = o)), o
            }

            function g(e) {
                var t, n = e.ownerDocument, r = e.nodeName, o = Ue[r];
                return o ? o : (t = n.body.appendChild(n.createElement(r)), o = de.css(t, "display"), t.parentNode.removeChild(t), "none" === o && (o = "block"), Ue[r] = o, o)
            }

            function m(e, t) {
                for (var n, r, o = [], i = 0, a = e.length; i < a; i++)r = e[i], r.style && (n = r.style.display, t ? ("none" === n && (o[i] = Fe.get(r, "display") || null, o[i] || (r.style.display = "")), "" === r.style.display && We(r) && (o[i] = g(r))) : "none" !== n && (o[i] = "none", Fe.set(r, "display", n)));
                for (i = 0; i < a; i++)null != o[i] && (e[i].style.display = o[i]);
                return e
            }

            function v(e, t) {
                var n;
                return n = "undefined" != typeof e.getElementsByTagName ? e.getElementsByTagName(t || "*") : "undefined" != typeof e.querySelectorAll ? e.querySelectorAll(t || "*") : [], void 0 === t || t && de.nodeName(e, t) ? de.merge([e], n) : n
            }

            function y(e, t) {
                for (var n = 0, r = e.length; n < r; n++)Fe.set(e[n], "globalEval", !t || Fe.get(t[n], "globalEval"))
            }

            function b(e, t, n, r, o) {
                for (var i, a, s, u, l, c, f = t.createDocumentFragment(), p = [], h = 0, d = e.length; h < d; h++)if (i = e[h], i || 0 === i)if ("object" === de.type(i)) de.merge(p, i.nodeType ? [i] : i); else if (Ge.test(i)) {
                    for (a = a || f.appendChild(t.createElement("div")), s = (Xe.exec(i) || ["", ""])[1].toLowerCase(), u = Ve[s] || Ve._default, a.innerHTML = u[1] + de.htmlPrefilter(i) + u[2], c = u[0]; c--;)a = a.lastChild;
                    de.merge(p, a.childNodes), a = f.firstChild, a.textContent = ""
                } else p.push(t.createTextNode(i));
                for (f.textContent = "", h = 0; i = p[h++];)if (r && de.inArray(i, r) > -1) o && o.push(i); else if (l = de.contains(i.ownerDocument, i), a = v(f.appendChild(i), "script"), l && y(a), n)for (c = 0; i = a[c++];)Ke.test(i.type || "") && n.push(i);
                return f
            }

            function x() {
                return !0
            }

            function w() {
                return !1
            }

            function C() {
                try {
                    return te.activeElement
                } catch (e) {
                }
            }

            function T(e, t, n, r, o, i) {
                var a, s;
                if ("object" == typeof t) {
                    "string" != typeof n && (r = r || n, n = void 0);
                    for (s in t)T(e, s, n, r, t[s], i);
                    return e
                }
                if (null == r && null == o ? (o = n, r = n = void 0) : null == o && ("string" == typeof n ? (o = r, r = void 0) : (o = r, r = n, n = void 0)), o === !1) o = w; else if (!o)return e;
                return 1 === i && (a = o, o = function (e) {
                    return de().off(e), a.apply(this, arguments)
                }, o.guid = a.guid || (a.guid = de.guid++)), e.each(function () {
                    de.event.add(this, t, o, r, n)
                })
            }

            function k(e, t) {
                return de.nodeName(e, "table") && de.nodeName(11 !== t.nodeType ? t : t.firstChild, "tr") ? e.getElementsByTagName("tbody")[0] || e : e
            }

            function j(e) {
                return e.type = (null !== e.getAttribute("type")) + "/" + e.type, e
            }

            function E(e) {
                var t = rt.exec(e.type);
                return t ? e.type = t[1] : e.removeAttribute("type"), e
            }

            function N(e, t) {
                var n, r, o, i, a, s, u, l;
                if (1 === t.nodeType) {
                    if (Fe.hasData(e) && (i = Fe.access(e), a = Fe.set(t, i), l = i.events)) {
                        delete a.handle, a.events = {};
                        for (o in l)for (n = 0, r = l[o].length; n < r; n++)de.event.add(t, o, l[o][n])
                    }
                    Pe.hasData(e) && (s = Pe.access(e), u = de.extend({}, s), Pe.set(t, u))
                }
            }

            function S(e, t) {
                var n = t.nodeName.toLowerCase();
                "input" === n && ze.test(e.type) ? t.checked = e.checked : "input" !== n && "textarea" !== n || (t.defaultValue = e.defaultValue)
            }

            function A(e, t, r, o) {
                t = oe.apply([], t);
                var i, a, s, u, l, c, f = 0, p = e.length, h = p - 1, d = t[0], g = de.isFunction(d);
                if (g || p > 1 && "string" == typeof d && !pe.checkClone && nt.test(d))return e.each(function (n) {
                    var i = e.eq(n);
                    g && (t[0] = d.call(this, n, i.html())), A(i, t, r, o)
                });
                if (p && (i = b(t, e[0].ownerDocument, !1, e, o), a = i.firstChild, 1 === i.childNodes.length && (i = a), a || o)) {
                    for (s = de.map(v(i, "script"), j), u = s.length; f < p; f++)l = i, f !== h && (l = de.clone(l, !0, !0), u && de.merge(s, v(l, "script"))), r.call(e[f], l, f);
                    if (u)for (c = s[s.length - 1].ownerDocument, de.map(s, E), f = 0; f < u; f++)l = s[f], Ke.test(l.type || "") && !Fe.access(l, "globalEval") && de.contains(c, l) && (l.src ? de._evalUrl && de._evalUrl(l.src) : n(l.textContent.replace(ot, ""), c))
                }
                return e
            }

            function q(e, t, n) {
                for (var r, o = t ? de.filter(t, e) : e, i = 0; null != (r = o[i]); i++)n || 1 !== r.nodeType || de.cleanData(v(r)), r.parentNode && (n && de.contains(r.ownerDocument, r) && y(v(r, "script")), r.parentNode.removeChild(r));
                return e
            }

            function D(e, t, n) {
                var r, o, i, a, s = e.style;
                return n = n || st(e), n && (a = n.getPropertyValue(t) || n[t], "" !== a || de.contains(e.ownerDocument, e) || (a = de.style(e, t)), !pe.pixelMarginRight() && at.test(a) && it.test(t) && (r = s.width, o = s.minWidth, i = s.maxWidth, s.minWidth = s.maxWidth = s.width = a, a = n.width, s.width = r, s.minWidth = o, s.maxWidth = i)), void 0 !== a ? a + "" : a
            }

            function O(e, t) {
                return {
                    get: function () {
                        return e() ? void delete this.get : (this.get = t).apply(this, arguments)
                    }
                }
            }

            function L(e) {
                if (e in pt)return e;
                for (var t = e[0].toUpperCase() + e.slice(1), n = ft.length; n--;)if (e = ft[n] + t, e in pt)return e
            }

            function H(e, t, n) {
                var r = $e.exec(t);
                return r ? Math.max(0, r[2] - (n || 0)) + (r[3] || "px") : t
            }

            function F(e, t, n, r, o) {
                var i, a = 0;
                for (i = n === (r ? "border" : "content") ? 4 : "width" === t ? 1 : 0; i < 4; i += 2)"margin" === n && (a += de.css(e, n + _e[i], !0, o)), r ? ("content" === n && (a -= de.css(e, "padding" + _e[i], !0, o)), "margin" !== n && (a -= de.css(e, "border" + _e[i] + "Width", !0, o))) : (a += de.css(e, "padding" + _e[i], !0, o), "padding" !== n && (a += de.css(e, "border" + _e[i] + "Width", !0, o)));
                return a
            }

            function P(e, t, n) {
                var r, o = !0, i = st(e), a = "border-box" === de.css(e, "boxSizing", !1, i);
                if (e.getClientRects().length && (r = e.getBoundingClientRect()[t]), r <= 0 || null == r) {
                    if (r = D(e, t, i), (r < 0 || null == r) && (r = e.style[t]), at.test(r))return r;
                    o = a && (pe.boxSizingReliable() || r === e.style[t]), r = parseFloat(r) || 0
                }
                return r + F(e, t, n || (a ? "border" : "content"), o, i) + "px"
            }

            function I(e, t, n, r, o) {
                return new I.prototype.init(e, t, n, r, o)
            }

            function R() {
                dt && (e.requestAnimationFrame(R), de.fx.tick())
            }

            function M() {
                return e.setTimeout(function () {
                    ht = void 0
                }), ht = de.now()
            }

            function $(e, t) {
                var n, r = 0, o = {height: e};
                for (t = t ? 1 : 0; r < 4; r += 2 - t)n = _e[r], o["margin" + n] = o["padding" + n] = e;
                return t && (o.opacity = o.width = e), o
            }

            function _(e, t, n) {
                for (var r, o = (U.tweeners[t] || []).concat(U.tweeners["*"]), i = 0, a = o.length; i < a; i++)if (r = o[i].call(n, t, e))return r
            }

            function W(e, t, n) {
                var r, o, i, a, s, u, l, c, f = "width" in t || "height" in t, p = this, h = {}, d = e.style,
                    g = e.nodeType && We(e), v = Fe.get(e, "fxshow");
                n.queue || (a = de._queueHooks(e, "fx"), null == a.unqueued && (a.unqueued = 0, s = a.empty.fire, a.empty.fire = function () {
                    a.unqueued || s()
                }), a.unqueued++, p.always(function () {
                    p.always(function () {
                        a.unqueued--, de.queue(e, "fx").length || a.empty.fire()
                    })
                }));
                for (r in t)if (o = t[r], gt.test(o)) {
                    if (delete t[r], i = i || "toggle" === o, o === (g ? "hide" : "show")) {
                        if ("show" !== o || !v || void 0 === v[r])continue;
                        g = !0
                    }
                    h[r] = v && v[r] || de.style(e, r)
                }
                if (u = !de.isEmptyObject(t), u || !de.isEmptyObject(h)) {
                    f && 1 === e.nodeType && (n.overflow = [d.overflow, d.overflowX, d.overflowY], l = v && v.display, null == l && (l = Fe.get(e, "display")), c = de.css(e, "display"), "none" === c && (l ? c = l : (m([e], !0), l = e.style.display || l, c = de.css(e, "display"), m([e]))), ("inline" === c || "inline-block" === c && null != l) && "none" === de.css(e, "float") && (u || (p.done(function () {
                        d.display = l
                    }), null == l && (c = d.display, l = "none" === c ? "" : c)), d.display = "inline-block")), n.overflow && (d.overflow = "hidden", p.always(function () {
                        d.overflow = n.overflow[0], d.overflowX = n.overflow[1], d.overflowY = n.overflow[2]
                    })), u = !1;
                    for (r in h)u || (v ? "hidden" in v && (g = v.hidden) : v = Fe.access(e, "fxshow", {display: l}), i && (v.hidden = !g), g && m([e], !0), p.done(function () {
                        g || m([e]), Fe.remove(e, "fxshow");
                        for (r in h)de.style(e, r, h[r])
                    })), u = _(g ? v[r] : 0, r, p), r in v || (v[r] = u.start, g && (u.end = u.start, u.start = 0))
                }
            }

            function B(e, t) {
                var n, r, o, i, a;
                for (n in e)if (r = de.camelCase(n), o = t[r], i = e[n], de.isArray(i) && (o = i[1], i = e[n] = i[0]), n !== r && (e[r] = i, delete e[n]), a = de.cssHooks[r], a && "expand" in a) {
                    i = a.expand(i), delete e[r];
                    for (n in i)n in e || (e[n] = i[n], t[n] = o)
                } else t[r] = o
            }

            function U(e, t, n) {
                var r, o, i = 0, a = U.prefilters.length, s = de.Deferred().always(function () {
                    delete u.elem
                }), u = function () {
                    if (o)return !1;
                    for (var t = ht || M(), n = Math.max(0, l.startTime + l.duration - t), r = n / l.duration || 0, i = 1 - r, a = 0, u = l.tweens.length; a < u; a++)l.tweens[a].run(i);
                    return s.notifyWith(e, [l, i, n]), i < 1 && u ? n : (s.resolveWith(e, [l]), !1)
                }, l = s.promise({
                    elem: e,
                    props: de.extend({}, t),
                    opts: de.extend(!0, {specialEasing: {}, easing: de.easing._default}, n),
                    originalProperties: t,
                    originalOptions: n,
                    startTime: ht || M(),
                    duration: n.duration,
                    tweens: [],
                    createTween: function (t, n) {
                        var r = de.Tween(e, l.opts, t, n, l.opts.specialEasing[t] || l.opts.easing);
                        return l.tweens.push(r), r
                    },
                    stop: function (t) {
                        var n = 0, r = t ? l.tweens.length : 0;
                        if (o)return this;
                        for (o = !0; n < r; n++)l.tweens[n].run(1);
                        return t ? (s.notifyWith(e, [l, 1, 0]), s.resolveWith(e, [l, t])) : s.rejectWith(e, [l, t]), this
                    }
                }), c = l.props;
                for (B(c, l.opts.specialEasing); i < a; i++)if (r = U.prefilters[i].call(l, e, c, l.opts))return de.isFunction(r.stop) && (de._queueHooks(l.elem, l.opts.queue).stop = de.proxy(r.stop, r)), r;
                return de.map(c, _, l), de.isFunction(l.opts.start) && l.opts.start.call(e, l), de.fx.timer(de.extend(u, {
                    elem: e,
                    anim: l,
                    queue: l.opts.queue
                })), l.progress(l.opts.progress).done(l.opts.done, l.opts.complete).fail(l.opts.fail).always(l.opts.always)
            }

            function z(e) {
                var t = e.match(qe) || [];
                return t.join(" ")
            }

            function X(e) {
                return e.getAttribute && e.getAttribute("class") || ""
            }

            function K(e, t, n, r) {
                var o;
                if (de.isArray(t)) de.each(t, function (t, o) {
                    n || Et.test(e) ? r(e, o) : K(e + "[" + ("object" == typeof o && null != o ? t : "") + "]", o, n, r)
                }); else if (n || "object" !== de.type(t)) r(e, t); else for (o in t)K(e + "[" + o + "]", t[o], n, r)
            }

            function V(e) {
                return function (t, n) {
                    "string" != typeof t && (n = t, t = "*");
                    var r, o = 0, i = t.toLowerCase().match(qe) || [];
                    if (de.isFunction(n))for (; r = i[o++];)"+" === r[0] ? (r = r.slice(1) || "*", (e[r] = e[r] || []).unshift(n)) : (e[r] = e[r] || []).push(n)
                }
            }

            function G(e, t, n, r) {
                function o(s) {
                    var u;
                    return i[s] = !0, de.each(e[s] || [], function (e, s) {
                        var l = s(t, n, r);
                        return "string" != typeof l || a || i[l] ? a ? !(u = l) : void 0 : (t.dataTypes.unshift(l), o(l), !1)
                    }), u
                }

                var i = {}, a = e === Rt;
                return o(t.dataTypes[0]) || !i["*"] && o("*")
            }

            function Y(e, t) {
                var n, r, o = de.ajaxSettings.flatOptions || {};
                for (n in t)void 0 !== t[n] && ((o[n] ? e : r || (r = {}))[n] = t[n]);
                return r && de.extend(!0, e, r), e
            }

            function Q(e, t, n) {
                for (var r, o, i, a, s = e.contents, u = e.dataTypes; "*" === u[0];)u.shift(), void 0 === r && (r = e.mimeType || t.getResponseHeader("Content-Type"));
                if (r)for (o in s)if (s[o] && s[o].test(r)) {
                    u.unshift(o);
                    break
                }
                if (u[0] in n) i = u[0]; else {
                    for (o in n) {
                        if (!u[0] || e.converters[o + " " + u[0]]) {
                            i = o;
                            break
                        }
                        a || (a = o)
                    }
                    i = i || a
                }
                if (i)return i !== u[0] && u.unshift(i), n[i]
            }

            function J(e, t, n, r) {
                var o, i, a, s, u, l = {}, c = e.dataTypes.slice();
                if (c[1])for (a in e.converters)l[a.toLowerCase()] = e.converters[a];
                for (i = c.shift(); i;)if (e.responseFields[i] && (n[e.responseFields[i]] = t), !u && r && e.dataFilter && (t = e.dataFilter(t, e.dataType)), u = i, i = c.shift())if ("*" === i) i = u; else if ("*" !== u && u !== i) {
                    if (a = l[u + " " + i] || l["* " + i], !a)for (o in l)if (s = o.split(" "), s[1] === i && (a = l[u + " " + s[0]] || l["* " + s[0]])) {
                        a === !0 ? a = l[o] : l[o] !== !0 && (i = s[0], c.unshift(s[1]));
                        break
                    }
                    if (a !== !0)if (a && e.throws) t = a(t); else try {
                        t = a(t)
                    } catch (e) {
                        return {state: "parsererror", error: a ? e : "No conversion from " + u + " to " + i}
                    }
                }
                return {state: "success", data: t}
            }

            function Z(e) {
                return de.isWindow(e) ? e : 9 === e.nodeType && e.defaultView
            }

            var ee = [], te = e.document, ne = Object.getPrototypeOf, re = ee.slice, oe = ee.concat, ie = ee.push,
                ae = ee.indexOf, se = {}, ue = se.toString, le = se.hasOwnProperty, ce = le.toString,
                fe = ce.call(Object), pe = {}, he = "3.1.1", de = function (e, t) {
                    return new de.fn.init(e, t)
                }, ge = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, me = /^-ms-/, ve = /-([a-z])/g, ye = function (e, t) {
                    return t.toUpperCase()
                };
            de.fn = de.prototype = {
                jquery: he, constructor: de, length: 0, toArray: function () {
                    return re.call(this)
                }, get: function (e) {
                    return null == e ? re.call(this) : e < 0 ? this[e + this.length] : this[e]
                }, pushStack: function (e) {
                    var t = de.merge(this.constructor(), e);
                    return t.prevObject = this, t
                }, each: function (e) {
                    return de.each(this, e)
                }, map: function (e) {
                    return this.pushStack(de.map(this, function (t, n) {
                        return e.call(t, n, t)
                    }))
                }, slice: function () {
                    return this.pushStack(re.apply(this, arguments))
                }, first: function () {
                    return this.eq(0)
                }, last: function () {
                    return this.eq(-1)
                }, eq: function (e) {
                    var t = this.length, n = +e + (e < 0 ? t : 0);
                    return this.pushStack(n >= 0 && n < t ? [this[n]] : [])
                }, end: function () {
                    return this.prevObject || this.constructor()
                }, push: ie, sort: ee.sort, splice: ee.splice
            }, de.extend = de.fn.extend = function () {
                var e, t, n, r, o, i, a = arguments[0] || {}, s = 1, u = arguments.length, l = !1;
                for ("boolean" == typeof a && (l = a, a = arguments[s] || {}, s++), "object" == typeof a || de.isFunction(a) || (a = {}), s === u && (a = this, s--); s < u; s++)if (null != (e = arguments[s]))for (t in e)n = a[t], r = e[t], a !== r && (l && r && (de.isPlainObject(r) || (o = de.isArray(r))) ? (o ? (o = !1, i = n && de.isArray(n) ? n : []) : i = n && de.isPlainObject(n) ? n : {}, a[t] = de.extend(l, i, r)) : void 0 !== r && (a[t] = r));
                return a
            }, de.extend({
                expando: "jQuery" + (he + Math.random()).replace(/\D/g, ""),
                isReady: !0,
                error: function (e) {
                    throw new Error(e)
                },
                noop: function () {
                },
                isFunction: function (e) {
                    return "function" === de.type(e)
                },
                isArray: Array.isArray,
                isWindow: function (e) {
                    return null != e && e === e.window
                },
                isNumeric: function (e) {
                    var t = de.type(e);
                    return ("number" === t || "string" === t) && !isNaN(e - parseFloat(e))
                },
                isPlainObject: function (e) {
                    var t, n;
                    return !(!e || "[object Object]" !== ue.call(e)) && (!(t = ne(e)) || (n = le.call(t, "constructor") && t.constructor, "function" == typeof n && ce.call(n) === fe))
                },
                isEmptyObject: function (e) {
                    var t;
                    for (t in e)return !1;
                    return !0
                },
                type: function (e) {
                    return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? se[ue.call(e)] || "object" : typeof e
                },
                globalEval: function (e) {
                    n(e)
                },
                camelCase: function (e) {
                    return e.replace(me, "ms-").replace(ve, ye)
                },
                nodeName: function (e, t) {
                    return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase()
                },
                each: function (e, t) {
                    var n, o = 0;
                    if (r(e))for (n = e.length; o < n && t.call(e[o], o, e[o]) !== !1; o++); else for (o in e)if (t.call(e[o], o, e[o]) === !1)break;
                    return e
                },
                trim: function (e) {
                    return null == e ? "" : (e + "").replace(ge, "")
                },
                makeArray: function (e, t) {
                    var n = t || [];
                    return null != e && (r(Object(e)) ? de.merge(n, "string" == typeof e ? [e] : e) : ie.call(n, e)), n
                },
                inArray: function (e, t, n) {
                    return null == t ? -1 : ae.call(t, e, n)
                },
                merge: function (e, t) {
                    for (var n = +t.length, r = 0, o = e.length; r < n; r++)e[o++] = t[r];
                    return e.length = o, e
                },
                grep: function (e, t, n) {
                    for (var r, o = [], i = 0, a = e.length, s = !n; i < a; i++)r = !t(e[i], i), r !== s && o.push(e[i]);
                    return o
                },
                map: function (e, t, n) {
                    var o, i, a = 0, s = [];
                    if (r(e))for (o = e.length; a < o; a++)i = t(e[a], a, n), null != i && s.push(i); else for (a in e)i = t(e[a], a, n), null != i && s.push(i);
                    return oe.apply([], s)
                },
                guid: 1,
                proxy: function (e, t) {
                    var n, r, o;
                    if ("string" == typeof t && (n = e[t], t = e, e = n), de.isFunction(e))return r = re.call(arguments, 2), o = function () {
                        return e.apply(t || this, r.concat(re.call(arguments)))
                    }, o.guid = e.guid = e.guid || de.guid++, o
                },
                now: Date.now,
                support: pe
            }), "function" == typeof Symbol && (de.fn[Symbol.iterator] = ee[Symbol.iterator]), de.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (e, t) {
                se["[object " + t + "]"] = t.toLowerCase()
            });
            var be = function (e) {
                function t(e, t, n, r) {
                    var o, i, a, s, u, l, c, p = t && t.ownerDocument, d = t ? t.nodeType : 9;
                    if (n = n || [], "string" != typeof e || !e || 1 !== d && 9 !== d && 11 !== d)return n;
                    if (!r && ((t ? t.ownerDocument || t : _) !== L && O(t), t = t || L, F)) {
                        if (11 !== d && (u = ve.exec(e)))if (o = u[1]) {
                            if (9 === d) {
                                if (!(a = t.getElementById(o)))return n;
                                if (a.id === o)return n.push(a), n
                            } else if (p && (a = p.getElementById(o)) && M(t, a) && a.id === o)return n.push(a), n
                        } else {
                            if (u[2])return J.apply(n, t.getElementsByTagName(e)), n;
                            if ((o = u[3]) && C.getElementsByClassName && t.getElementsByClassName)return J.apply(n, t.getElementsByClassName(o)), n
                        }
                        if (C.qsa && !X[e + " "] && (!P || !P.test(e))) {
                            if (1 !== d) p = t, c = e; else if ("object" !== t.nodeName.toLowerCase()) {
                                for ((s = t.getAttribute("id")) ? s = s.replace(we, Ce) : t.setAttribute("id", s = $), l = E(e), i = l.length; i--;)l[i] = "#" + s + " " + h(l[i]);
                                c = l.join(","), p = ye.test(e) && f(t.parentNode) || t
                            }
                            if (c)try {
                                return J.apply(n, p.querySelectorAll(c)), n
                            } catch (e) {
                            } finally {
                                s === $ && t.removeAttribute("id")
                            }
                        }
                    }
                    return S(e.replace(se, "$1"), t, n, r)
                }

                function n() {
                    function e(n, r) {
                        return t.push(n + " ") > T.cacheLength && delete e[t.shift()], e[n + " "] = r
                    }

                    var t = [];
                    return e
                }

                function r(e) {
                    return e[$] = !0, e
                }

                function o(e) {
                    var t = L.createElement("fieldset");
                    try {
                        return !!e(t)
                    } catch (e) {
                        return !1
                    } finally {
                        t.parentNode && t.parentNode.removeChild(t), t = null
                    }
                }

                function i(e, t) {
                    for (var n = e.split("|"), r = n.length; r--;)T.attrHandle[n[r]] = t
                }

                function a(e, t) {
                    var n = t && e, r = n && 1 === e.nodeType && 1 === t.nodeType && e.sourceIndex - t.sourceIndex;
                    if (r)return r;
                    if (n)for (; n = n.nextSibling;)if (n === t)return -1;
                    return e ? 1 : -1
                }

                function s(e) {
                    return function (t) {
                        var n = t.nodeName.toLowerCase();
                        return "input" === n && t.type === e
                    }
                }

                function u(e) {
                    return function (t) {
                        var n = t.nodeName.toLowerCase();
                        return ("input" === n || "button" === n) && t.type === e
                    }
                }

                function l(e) {
                    return function (t) {
                        return "form" in t ? t.parentNode && t.disabled === !1 ? "label" in t ? "label" in t.parentNode ? t.parentNode.disabled === e : t.disabled === e : t.isDisabled === e || t.isDisabled !== !e && ke(t) === e : t.disabled === e : "label" in t && t.disabled === e
                    }
                }

                function c(e) {
                    return r(function (t) {
                        return t = +t, r(function (n, r) {
                            for (var o, i = e([], n.length, t), a = i.length; a--;)n[o = i[a]] && (n[o] = !(r[o] = n[o]))
                        })
                    })
                }

                function f(e) {
                    return e && "undefined" != typeof e.getElementsByTagName && e
                }

                function p() {
                }

                function h(e) {
                    for (var t = 0, n = e.length, r = ""; t < n; t++)r += e[t].value;
                    return r
                }

                function d(e, t, n) {
                    var r = t.dir, o = t.next, i = o || r, a = n && "parentNode" === i, s = B++;
                    return t.first ? function (t, n, o) {
                        for (; t = t[r];)if (1 === t.nodeType || a)return e(t, n, o);
                        return !1
                    } : function (t, n, u) {
                        var l, c, f, p = [W, s];
                        if (u) {
                            for (; t = t[r];)if ((1 === t.nodeType || a) && e(t, n, u))return !0
                        } else for (; t = t[r];)if (1 === t.nodeType || a)if (f = t[$] || (t[$] = {}), c = f[t.uniqueID] || (f[t.uniqueID] = {}), o && o === t.nodeName.toLowerCase()) t = t[r] || t; else {
                            if ((l = c[i]) && l[0] === W && l[1] === s)return p[2] = l[2];
                            if (c[i] = p, p[2] = e(t, n, u))return !0
                        }
                        return !1
                    }
                }

                function g(e) {
                    return e.length > 1 ? function (t, n, r) {
                        for (var o = e.length; o--;)if (!e[o](t, n, r))return !1;
                        return !0
                    } : e[0]
                }

                function m(e, n, r) {
                    for (var o = 0, i = n.length; o < i; o++)t(e, n[o], r);
                    return r
                }

                function v(e, t, n, r, o) {
                    for (var i, a = [], s = 0, u = e.length, l = null != t; s < u; s++)(i = e[s]) && (n && !n(i, r, o) || (a.push(i), l && t.push(s)));
                    return a
                }

                function y(e, t, n, o, i, a) {
                    return o && !o[$] && (o = y(o)), i && !i[$] && (i = y(i, a)), r(function (r, a, s, u) {
                        var l, c, f, p = [], h = [], d = a.length, g = r || m(t || "*", s.nodeType ? [s] : s, []),
                            y = !e || !r && t ? g : v(g, p, e, s, u), b = n ? i || (r ? e : d || o) ? [] : a : y;
                        if (n && n(y, b, s, u), o)for (l = v(b, h), o(l, [], s, u), c = l.length; c--;)(f = l[c]) && (b[h[c]] = !(y[h[c]] = f));
                        if (r) {
                            if (i || e) {
                                if (i) {
                                    for (l = [], c = b.length; c--;)(f = b[c]) && l.push(y[c] = f);
                                    i(null, b = [], l, u)
                                }
                                for (c = b.length; c--;)(f = b[c]) && (l = i ? ee(r, f) : p[c]) > -1 && (r[l] = !(a[l] = f))
                            }
                        } else b = v(b === a ? b.splice(d, b.length) : b), i ? i(null, a, b, u) : J.apply(a, b)
                    })
                }

                function b(e) {
                    for (var t, n, r, o = e.length, i = T.relative[e[0].type], a = i || T.relative[" "], s = i ? 1 : 0, u = d(function (e) {
                        return e === t
                    }, a, !0), l = d(function (e) {
                        return ee(t, e) > -1
                    }, a, !0), c = [function (e, n, r) {
                        var o = !i && (r || n !== A) || ((t = n).nodeType ? u(e, n, r) : l(e, n, r));
                        return t = null, o
                    }]; s < o; s++)if (n = T.relative[e[s].type]) c = [d(g(c), n)]; else {
                        if (n = T.filter[e[s].type].apply(null, e[s].matches), n[$]) {
                            for (r = ++s; r < o && !T.relative[e[r].type]; r++);
                            return y(s > 1 && g(c), s > 1 && h(e.slice(0, s - 1).concat({value: " " === e[s - 2].type ? "*" : ""})).replace(se, "$1"), n, s < r && b(e.slice(s, r)), r < o && b(e = e.slice(r)), r < o && h(e))
                        }
                        c.push(n)
                    }
                    return g(c)
                }

                function x(e, n) {
                    var o = n.length > 0, i = e.length > 0, a = function (r, a, s, u, l) {
                        var c, f, p, h = 0, d = "0", g = r && [], m = [], y = A, b = r || i && T.find.TAG("*", l),
                            x = W += null == y ? 1 : Math.random() || .1, w = b.length;
                        for (l && (A = a === L || a || l); d !== w && null != (c = b[d]); d++) {
                            if (i && c) {
                                for (f = 0, a || c.ownerDocument === L || (O(c), s = !F); p = e[f++];)if (p(c, a || L, s)) {
                                    u.push(c);
                                    break
                                }
                                l && (W = x)
                            }
                            o && ((c = !p && c) && h--, r && g.push(c))
                        }
                        if (h += d, o && d !== h) {
                            for (f = 0; p = n[f++];)p(g, m, a, s);
                            if (r) {
                                if (h > 0)for (; d--;)g[d] || m[d] || (m[d] = Y.call(u));
                                m = v(m)
                            }
                            J.apply(u, m), l && !r && m.length > 0 && h + n.length > 1 && t.uniqueSort(u)
                        }
                        return l && (W = x, A = y), g
                    };
                    return o ? r(a) : a
                }

                var w, C, T, k, j, E, N, S, A, q, D, O, L, H, F, P, I, R, M, $ = "sizzle" + 1 * new Date,
                    _ = e.document, W = 0, B = 0, U = n(), z = n(), X = n(), K = function (e, t) {
                        return e === t && (D = !0), 0
                    }, V = {}.hasOwnProperty, G = [], Y = G.pop, Q = G.push, J = G.push, Z = G.slice, ee = function (e, t) {
                        for (var n = 0, r = e.length; n < r; n++)if (e[n] === t)return n;
                        return -1
                    },
                    te = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
                    ne = "[\\x20\\t\\r\\n\\f]", re = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
                    oe = "\\[" + ne + "*(" + re + ")(?:" + ne + "*([*^$|!~]?=)" + ne + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + re + "))|)" + ne + "*\\]",
                    ie = ":(" + re + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + oe + ")*)|.*)\\)|)",
                    ae = new RegExp(ne + "+", "g"),
                    se = new RegExp("^" + ne + "+|((?:^|[^\\\\])(?:\\\\.)*)" + ne + "+$", "g"),
                    ue = new RegExp("^" + ne + "*," + ne + "*"),
                    le = new RegExp("^" + ne + "*([>+~]|" + ne + ")" + ne + "*"),
                    ce = new RegExp("=" + ne + "*([^\\]'\"]*?)" + ne + "*\\]", "g"), fe = new RegExp(ie),
                    pe = new RegExp("^" + re + "$"), he = {
                        ID: new RegExp("^#(" + re + ")"),
                        CLASS: new RegExp("^\\.(" + re + ")"),
                        TAG: new RegExp("^(" + re + "|[*])"),
                        ATTR: new RegExp("^" + oe),
                        PSEUDO: new RegExp("^" + ie),
                        CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + ne + "*(even|odd|(([+-]|)(\\d*)n|)" + ne + "*(?:([+-]|)" + ne + "*(\\d+)|))" + ne + "*\\)|)", "i"),
                        bool: new RegExp("^(?:" + te + ")$", "i"),
                        needsContext: new RegExp("^" + ne + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + ne + "*((?:-\\d)?\\d*)" + ne + "*\\)|)(?=[^-]|$)", "i")
                    }, de = /^(?:input|select|textarea|button)$/i, ge = /^h\d$/i, me = /^[^{]+\{\s*\[native \w/,
                    ve = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, ye = /[+~]/,
                    be = new RegExp("\\\\([\\da-f]{1,6}" + ne + "?|(" + ne + ")|.)", "ig"), xe = function (e, t, n) {
                        var r = "0x" + t - 65536;
                        return r !== r || n ? t : r < 0 ? String.fromCharCode(r + 65536) : String.fromCharCode(r >> 10 | 55296, 1023 & r | 56320)
                    }, we = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, Ce = function (e, t) {
                        return t ? "\0" === e ? "�" : e.slice(0, -1) + "\\" + e.charCodeAt(e.length - 1).toString(16) + " " : "\\" + e
                    }, Te = function () {
                        O()
                    }, ke = d(function (e) {
                        return e.disabled === !0 && ("form" in e || "label" in e)
                    }, {dir: "parentNode", next: "legend"});
                try {
                    J.apply(G = Z.call(_.childNodes), _.childNodes), G[_.childNodes.length].nodeType
                } catch (e) {
                    J = {
                        apply: G.length ? function (e, t) {
                            Q.apply(e, Z.call(t))
                        } : function (e, t) {
                            for (var n = e.length, r = 0; e[n++] = t[r++];);
                            e.length = n - 1
                        }
                    }
                }
                C = t.support = {}, j = t.isXML = function (e) {
                    var t = e && (e.ownerDocument || e).documentElement;
                    return !!t && "HTML" !== t.nodeName
                }, O = t.setDocument = function (e) {
                    var t, n, r = e ? e.ownerDocument || e : _;
                    return r !== L && 9 === r.nodeType && r.documentElement ? (L = r, H = L.documentElement, F = !j(L), _ !== L && (n = L.defaultView) && n.top !== n && (n.addEventListener ? n.addEventListener("unload", Te, !1) : n.attachEvent && n.attachEvent("onunload", Te)), C.attributes = o(function (e) {
                        return e.className = "i", !e.getAttribute("className")
                    }), C.getElementsByTagName = o(function (e) {
                        return e.appendChild(L.createComment("")), !e.getElementsByTagName("*").length
                    }), C.getElementsByClassName = me.test(L.getElementsByClassName), C.getById = o(function (e) {
                        return H.appendChild(e).id = $, !L.getElementsByName || !L.getElementsByName($).length
                    }), C.getById ? (T.filter.ID = function (e) {
                        var t = e.replace(be, xe);
                        return function (e) {
                            return e.getAttribute("id") === t
                        }
                    }, T.find.ID = function (e, t) {
                        if ("undefined" != typeof t.getElementById && F) {
                            var n = t.getElementById(e);
                            return n ? [n] : []
                        }
                    }) : (T.filter.ID = function (e) {
                        var t = e.replace(be, xe);
                        return function (e) {
                            var n = "undefined" != typeof e.getAttributeNode && e.getAttributeNode("id");
                            return n && n.value === t
                        }
                    }, T.find.ID = function (e, t) {
                        if ("undefined" != typeof t.getElementById && F) {
                            var n, r, o, i = t.getElementById(e);
                            if (i) {
                                if (n = i.getAttributeNode("id"), n && n.value === e)return [i];
                                for (o = t.getElementsByName(e), r = 0; i = o[r++];)if (n = i.getAttributeNode("id"), n && n.value === e)return [i]
                            }
                            return []
                        }
                    }), T.find.TAG = C.getElementsByTagName ? function (e, t) {
                        return "undefined" != typeof t.getElementsByTagName ? t.getElementsByTagName(e) : C.qsa ? t.querySelectorAll(e) : void 0
                    } : function (e, t) {
                        var n, r = [], o = 0, i = t.getElementsByTagName(e);
                        if ("*" === e) {
                            for (; n = i[o++];)1 === n.nodeType && r.push(n);
                            return r
                        }
                        return i
                    }, T.find.CLASS = C.getElementsByClassName && function (e, t) {
                            if ("undefined" != typeof t.getElementsByClassName && F)return t.getElementsByClassName(e)
                        }, I = [], P = [], (C.qsa = me.test(L.querySelectorAll)) && (o(function (e) {
                        H.appendChild(e).innerHTML = "<a id='" + $ + "'></a><select id='" + $ + "-\r\\' msallowcapture=''><option selected=''></option></select>", e.querySelectorAll("[msallowcapture^='']").length && P.push("[*^$]=" + ne + "*(?:''|\"\")"), e.querySelectorAll("[selected]").length || P.push("\\[" + ne + "*(?:value|" + te + ")"), e.querySelectorAll("[id~=" + $ + "-]").length || P.push("~="), e.querySelectorAll(":checked").length || P.push(":checked"), e.querySelectorAll("a#" + $ + "+*").length || P.push(".#.+[+~]")
                    }), o(function (e) {
                        e.innerHTML = "<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";
                        var t = L.createElement("input");
                        t.setAttribute("type", "hidden"), e.appendChild(t).setAttribute("name", "D"), e.querySelectorAll("[name=d]").length && P.push("name" + ne + "*[*^$|!~]?="), 2 !== e.querySelectorAll(":enabled").length && P.push(":enabled", ":disabled"), H.appendChild(e).disabled = !0, 2 !== e.querySelectorAll(":disabled").length && P.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), P.push(",.*:")
                    })), (C.matchesSelector = me.test(R = H.matches || H.webkitMatchesSelector || H.mozMatchesSelector || H.oMatchesSelector || H.msMatchesSelector)) && o(function (e) {
                        C.disconnectedMatch = R.call(e, "*"), R.call(e, "[s!='']:x"), I.push("!=", ie)
                    }), P = P.length && new RegExp(P.join("|")), I = I.length && new RegExp(I.join("|")), t = me.test(H.compareDocumentPosition), M = t || me.test(H.contains) ? function (e, t) {
                        var n = 9 === e.nodeType ? e.documentElement : e, r = t && t.parentNode;
                        return e === r || !(!r || 1 !== r.nodeType || !(n.contains ? n.contains(r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r)))
                    } : function (e, t) {
                        if (t)for (; t = t.parentNode;)if (t === e)return !0;
                        return !1
                    }, K = t ? function (e, t) {
                        if (e === t)return D = !0, 0;
                        var n = !e.compareDocumentPosition - !t.compareDocumentPosition;
                        return n ? n : (n = (e.ownerDocument || e) === (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1, 1 & n || !C.sortDetached && t.compareDocumentPosition(e) === n ? e === L || e.ownerDocument === _ && M(_, e) ? -1 : t === L || t.ownerDocument === _ && M(_, t) ? 1 : q ? ee(q, e) - ee(q, t) : 0 : 4 & n ? -1 : 1)
                    } : function (e, t) {
                        if (e === t)return D = !0, 0;
                        var n, r = 0, o = e.parentNode, i = t.parentNode, s = [e], u = [t];
                        if (!o || !i)return e === L ? -1 : t === L ? 1 : o ? -1 : i ? 1 : q ? ee(q, e) - ee(q, t) : 0;
                        if (o === i)return a(e, t);
                        for (n = e; n = n.parentNode;)s.unshift(n);
                        for (n = t; n = n.parentNode;)u.unshift(n);
                        for (; s[r] === u[r];)r++;
                        return r ? a(s[r], u[r]) : s[r] === _ ? -1 : u[r] === _ ? 1 : 0
                    }, L) : L
                }, t.matches = function (e, n) {
                    return t(e, null, null, n)
                }, t.matchesSelector = function (e, n) {
                    if ((e.ownerDocument || e) !== L && O(e), n = n.replace(ce, "='$1']"), C.matchesSelector && F && !X[n + " "] && (!I || !I.test(n)) && (!P || !P.test(n)))try {
                        var r = R.call(e, n);
                        if (r || C.disconnectedMatch || e.document && 11 !== e.document.nodeType)return r
                    } catch (e) {
                    }
                    return t(n, L, null, [e]).length > 0
                }, t.contains = function (e, t) {
                    return (e.ownerDocument || e) !== L && O(e), M(e, t)
                }, t.attr = function (e, t) {
                    (e.ownerDocument || e) !== L && O(e);
                    var n = T.attrHandle[t.toLowerCase()],
                        r = n && V.call(T.attrHandle, t.toLowerCase()) ? n(e, t, !F) : void 0;
                    return void 0 !== r ? r : C.attributes || !F ? e.getAttribute(t) : (r = e.getAttributeNode(t)) && r.specified ? r.value : null
                }, t.escape = function (e) {
                    return (e + "").replace(we, Ce)
                }, t.error = function (e) {
                    throw new Error("Syntax error, unrecognized expression: " + e)
                }, t.uniqueSort = function (e) {
                    var t, n = [], r = 0, o = 0;
                    if (D = !C.detectDuplicates, q = !C.sortStable && e.slice(0), e.sort(K), D) {
                        for (; t = e[o++];)t === e[o] && (r = n.push(o));
                        for (; r--;)e.splice(n[r], 1)
                    }
                    return q = null, e
                }, k = t.getText = function (e) {
                    var t, n = "", r = 0, o = e.nodeType;
                    if (o) {
                        if (1 === o || 9 === o || 11 === o) {
                            if ("string" == typeof e.textContent)return e.textContent;
                            for (e = e.firstChild; e; e = e.nextSibling)n += k(e)
                        } else if (3 === o || 4 === o)return e.nodeValue
                    } else for (; t = e[r++];)n += k(t);
                    return n
                }, T = t.selectors = {
                    cacheLength: 50,
                    createPseudo: r,
                    match: he,
                    attrHandle: {},
                    find: {},
                    relative: {
                        ">": {dir: "parentNode", first: !0},
                        " ": {dir: "parentNode"},
                        "+": {dir: "previousSibling", first: !0},
                        "~": {dir: "previousSibling"}
                    },
                    preFilter: {
                        ATTR: function (e) {
                            return e[1] = e[1].replace(be, xe), e[3] = (e[3] || e[4] || e[5] || "").replace(be, xe), "~=" === e[2] && (e[3] = " " + e[3] + " "), e.slice(0, 4)
                        }, CHILD: function (e) {
                            return e[1] = e[1].toLowerCase(), "nth" === e[1].slice(0, 3) ? (e[3] || t.error(e[0]), e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])), e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] && t.error(e[0]), e
                        }, PSEUDO: function (e) {
                            var t, n = !e[6] && e[2];
                            return he.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : n && fe.test(n) && (t = E(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && (e[0] = e[0].slice(0, t), e[2] = n.slice(0, t)), e.slice(0, 3))
                        }
                    },
                    filter: {
                        TAG: function (e) {
                            var t = e.replace(be, xe).toLowerCase();
                            return "*" === e ? function () {
                                return !0
                            } : function (e) {
                                return e.nodeName && e.nodeName.toLowerCase() === t
                            }
                        }, CLASS: function (e) {
                            var t = U[e + " "];
                            return t || (t = new RegExp("(^|" + ne + ")" + e + "(" + ne + "|$)")) && U(e, function (e) {
                                    return t.test("string" == typeof e.className && e.className || "undefined" != typeof e.getAttribute && e.getAttribute("class") || "")
                                })
                        }, ATTR: function (e, n, r) {
                            return function (o) {
                                var i = t.attr(o, e);
                                return null == i ? "!=" === n : !n || (i += "", "=" === n ? i === r : "!=" === n ? i !== r : "^=" === n ? r && 0 === i.indexOf(r) : "*=" === n ? r && i.indexOf(r) > -1 : "$=" === n ? r && i.slice(-r.length) === r : "~=" === n ? (" " + i.replace(ae, " ") + " ").indexOf(r) > -1 : "|=" === n && (i === r || i.slice(0, r.length + 1) === r + "-"))
                            }
                        }, CHILD: function (e, t, n, r, o) {
                            var i = "nth" !== e.slice(0, 3), a = "last" !== e.slice(-4), s = "of-type" === t;
                            return 1 === r && 0 === o ? function (e) {
                                return !!e.parentNode
                            } : function (t, n, u) {
                                var l, c, f, p, h, d, g = i !== a ? "nextSibling" : "previousSibling", m = t.parentNode,
                                    v = s && t.nodeName.toLowerCase(), y = !u && !s, b = !1;
                                if (m) {
                                    if (i) {
                                        for (; g;) {
                                            for (p = t; p = p[g];)if (s ? p.nodeName.toLowerCase() === v : 1 === p.nodeType)return !1;
                                            d = g = "only" === e && !d && "nextSibling"
                                        }
                                        return !0
                                    }
                                    if (d = [a ? m.firstChild : m.lastChild], a && y) {
                                        for (p = m, f = p[$] || (p[$] = {}), c = f[p.uniqueID] || (f[p.uniqueID] = {}), l = c[e] || [], h = l[0] === W && l[1], b = h && l[2], p = h && m.childNodes[h]; p = ++h && p && p[g] || (b = h = 0) || d.pop();)if (1 === p.nodeType && ++b && p === t) {
                                            c[e] = [W, h, b];
                                            break
                                        }
                                    } else if (y && (p = t, f = p[$] || (p[$] = {}), c = f[p.uniqueID] || (f[p.uniqueID] = {}), l = c[e] || [], h = l[0] === W && l[1], b = h), b === !1)for (; (p = ++h && p && p[g] || (b = h = 0) || d.pop()) && ((s ? p.nodeName.toLowerCase() !== v : 1 !== p.nodeType) || !++b || (y && (f = p[$] || (p[$] = {}), c = f[p.uniqueID] || (f[p.uniqueID] = {}), c[e] = [W, b]), p !== t)););
                                    return b -= o, b === r || b % r === 0 && b / r >= 0
                                }
                            }
                        }, PSEUDO: function (e, n) {
                            var o,
                                i = T.pseudos[e] || T.setFilters[e.toLowerCase()] || t.error("unsupported pseudo: " + e);
                            return i[$] ? i(n) : i.length > 1 ? (o = [e, e, "", n], T.setFilters.hasOwnProperty(e.toLowerCase()) ? r(function (e, t) {
                                for (var r, o = i(e, n), a = o.length; a--;)r = ee(e, o[a]), e[r] = !(t[r] = o[a])
                            }) : function (e) {
                                return i(e, 0, o)
                            }) : i
                        }
                    },
                    pseudos: {
                        not: r(function (e) {
                            var t = [], n = [], o = N(e.replace(se, "$1"));
                            return o[$] ? r(function (e, t, n, r) {
                                for (var i, a = o(e, null, r, []), s = e.length; s--;)(i = a[s]) && (e[s] = !(t[s] = i))
                            }) : function (e, r, i) {
                                return t[0] = e, o(t, null, i, n), t[0] = null, !n.pop()
                            }
                        }), has: r(function (e) {
                            return function (n) {
                                return t(e, n).length > 0
                            }
                        }), contains: r(function (e) {
                            return e = e.replace(be, xe), function (t) {
                                return (t.textContent || t.innerText || k(t)).indexOf(e) > -1
                            }
                        }), lang: r(function (e) {
                            return pe.test(e || "") || t.error("unsupported lang: " + e), e = e.replace(be, xe).toLowerCase(), function (t) {
                                var n;
                                do if (n = F ? t.lang : t.getAttribute("xml:lang") || t.getAttribute("lang"))return n = n.toLowerCase(), n === e || 0 === n.indexOf(e + "-"); while ((t = t.parentNode) && 1 === t.nodeType);
                                return !1
                            }
                        }), target: function (t) {
                            var n = e.location && e.location.hash;
                            return n && n.slice(1) === t.id
                        }, root: function (e) {
                            return e === H
                        }, focus: function (e) {
                            return e === L.activeElement && (!L.hasFocus || L.hasFocus()) && !!(e.type || e.href || ~e.tabIndex)
                        }, enabled: l(!1), disabled: l(!0), checked: function (e) {
                            var t = e.nodeName.toLowerCase();
                            return "input" === t && !!e.checked || "option" === t && !!e.selected
                        }, selected: function (e) {
                            return e.parentNode && e.parentNode.selectedIndex, e.selected === !0
                        }, empty: function (e) {
                            for (e = e.firstChild; e; e = e.nextSibling)if (e.nodeType < 6)return !1;
                            return !0
                        }, parent: function (e) {
                            return !T.pseudos.empty(e)
                        }, header: function (e) {
                            return ge.test(e.nodeName)
                        }, input: function (e) {
                            return de.test(e.nodeName)
                        }, button: function (e) {
                            var t = e.nodeName.toLowerCase();
                            return "input" === t && "button" === e.type || "button" === t
                        }, text: function (e) {
                            var t;
                            return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase())
                        }, first: c(function () {
                            return [0]
                        }), last: c(function (e, t) {
                            return [t - 1]
                        }), eq: c(function (e, t, n) {
                            return [n < 0 ? n + t : n]
                        }), even: c(function (e, t) {
                            for (var n = 0; n < t; n += 2)e.push(n);
                            return e
                        }), odd: c(function (e, t) {
                            for (var n = 1; n < t; n += 2)e.push(n);
                            return e
                        }), lt: c(function (e, t, n) {
                            for (var r = n < 0 ? n + t : n; --r >= 0;)e.push(r);
                            return e
                        }), gt: c(function (e, t, n) {
                            for (var r = n < 0 ? n + t : n; ++r < t;)e.push(r);
                            return e
                        })
                    }
                }, T.pseudos.nth = T.pseudos.eq;
                for (w in{radio: !0, checkbox: !0, file: !0, password: !0, image: !0})T.pseudos[w] = s(w);
                for (w in{submit: !0, reset: !0})T.pseudos[w] = u(w);
                return p.prototype = T.filters = T.pseudos, T.setFilters = new p, E = t.tokenize = function (e, n) {
                    var r, o, i, a, s, u, l, c = z[e + " "];
                    if (c)return n ? 0 : c.slice(0);
                    for (s = e, u = [], l = T.preFilter; s;) {
                        r && !(o = ue.exec(s)) || (o && (s = s.slice(o[0].length) || s), u.push(i = [])), r = !1, (o = le.exec(s)) && (r = o.shift(), i.push({
                            value: r,
                            type: o[0].replace(se, " ")
                        }), s = s.slice(r.length));
                        for (a in T.filter)!(o = he[a].exec(s)) || l[a] && !(o = l[a](o)) || (r = o.shift(), i.push({
                            value: r,
                            type: a,
                            matches: o
                        }), s = s.slice(r.length));
                        if (!r)break
                    }
                    return n ? s.length : s ? t.error(e) : z(e, u).slice(0)
                }, N = t.compile = function (e, t) {
                    var n, r = [], o = [], i = X[e + " "];
                    if (!i) {
                        for (t || (t = E(e)), n = t.length; n--;)i = b(t[n]), i[$] ? r.push(i) : o.push(i);
                        i = X(e, x(o, r)), i.selector = e
                    }
                    return i
                }, S = t.select = function (e, t, n, r) {
                    var o, i, a, s, u, l = "function" == typeof e && e, c = !r && E(e = l.selector || e);
                    if (n = n || [], 1 === c.length) {
                        if (i = c[0] = c[0].slice(0), i.length > 2 && "ID" === (a = i[0]).type && 9 === t.nodeType && F && T.relative[i[1].type]) {
                            if (t = (T.find.ID(a.matches[0].replace(be, xe), t) || [])[0], !t)return n;
                            l && (t = t.parentNode), e = e.slice(i.shift().value.length)
                        }
                        for (o = he.needsContext.test(e) ? 0 : i.length; o-- && (a = i[o], !T.relative[s = a.type]);)if ((u = T.find[s]) && (r = u(a.matches[0].replace(be, xe), ye.test(i[0].type) && f(t.parentNode) || t))) {
                            if (i.splice(o, 1), e = r.length && h(i), !e)return J.apply(n, r), n;
                            break
                        }
                    }
                    return (l || N(e, c))(r, t, !F, n, !t || ye.test(e) && f(t.parentNode) || t), n
                }, C.sortStable = $.split("").sort(K).join("") === $, C.detectDuplicates = !!D, O(), C.sortDetached = o(function (e) {
                    return 1 & e.compareDocumentPosition(L.createElement("fieldset"))
                }), o(function (e) {
                    return e.innerHTML = "<a href='#'></a>", "#" === e.firstChild.getAttribute("href")
                }) || i("type|href|height|width", function (e, t, n) {
                    if (!n)return e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2)
                }), C.attributes && o(function (e) {
                    return e.innerHTML = "<input/>", e.firstChild.setAttribute("value", ""), "" === e.firstChild.getAttribute("value")
                }) || i("value", function (e, t, n) {
                    if (!n && "input" === e.nodeName.toLowerCase())return e.defaultValue
                }), o(function (e) {
                    return null == e.getAttribute("disabled")
                }) || i(te, function (e, t, n) {
                    var r;
                    if (!n)return e[t] === !0 ? t.toLowerCase() : (r = e.getAttributeNode(t)) && r.specified ? r.value : null
                }), t
            }(e);
            de.find = be, de.expr = be.selectors, de.expr[":"] = de.expr.pseudos, de.uniqueSort = de.unique = be.uniqueSort, de.text = be.getText, de.isXMLDoc = be.isXML, de.contains = be.contains, de.escapeSelector = be.escape;
            var xe = function (e, t, n) {
                    for (var r = [], o = void 0 !== n; (e = e[t]) && 9 !== e.nodeType;)if (1 === e.nodeType) {
                        if (o && de(e).is(n))break;
                        r.push(e)
                    }
                    return r
                }, we = function (e, t) {
                    for (var n = []; e; e = e.nextSibling)1 === e.nodeType && e !== t && n.push(e);
                    return n
                }, Ce = de.expr.match.needsContext, Te = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,
                ke = /^.[^:#\[\.,]*$/;
            de.filter = function (e, t, n) {
                var r = t[0];
                return n && (e = ":not(" + e + ")"), 1 === t.length && 1 === r.nodeType ? de.find.matchesSelector(r, e) ? [r] : [] : de.find.matches(e, de.grep(t, function (e) {
                    return 1 === e.nodeType
                }))
            }, de.fn.extend({
                find: function (e) {
                    var t, n, r = this.length, o = this;
                    if ("string" != typeof e)return this.pushStack(de(e).filter(function () {
                        for (t = 0; t < r; t++)if (de.contains(o[t], this))return !0
                    }));
                    for (n = this.pushStack([]), t = 0; t < r; t++)de.find(e, o[t], n);
                    return r > 1 ? de.uniqueSort(n) : n
                }, filter: function (e) {
                    return this.pushStack(o(this, e || [], !1))
                }, not: function (e) {
                    return this.pushStack(o(this, e || [], !0))
                }, is: function (e) {
                    return !!o(this, "string" == typeof e && Ce.test(e) ? de(e) : e || [], !1).length
                }
            });
            var je, Ee = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, Ne = de.fn.init = function (e, t, n) {
                var r, o;
                if (!e)return this;
                if (n = n || je, "string" == typeof e) {
                    if (r = "<" === e[0] && ">" === e[e.length - 1] && e.length >= 3 ? [null, e, null] : Ee.exec(e), !r || !r[1] && t)return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e);
                    if (r[1]) {
                        if (t = t instanceof de ? t[0] : t, de.merge(this, de.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : te, !0)), Te.test(r[1]) && de.isPlainObject(t))for (r in t)de.isFunction(this[r]) ? this[r](t[r]) : this.attr(r, t[r]);
                        return this
                    }
                    return o = te.getElementById(r[2]), o && (this[0] = o, this.length = 1), this
                }
                return e.nodeType ? (this[0] = e, this.length = 1, this) : de.isFunction(e) ? void 0 !== n.ready ? n.ready(e) : e(de) : de.makeArray(e, this)
            };
            Ne.prototype = de.fn, je = de(te);
            var Se = /^(?:parents|prev(?:Until|All))/, Ae = {children: !0, contents: !0, next: !0, prev: !0};
            de.fn.extend({
                has: function (e) {
                    var t = de(e, this), n = t.length;
                    return this.filter(function () {
                        for (var e = 0; e < n; e++)if (de.contains(this, t[e]))return !0
                    })
                }, closest: function (e, t) {
                    var n, r = 0, o = this.length, i = [], a = "string" != typeof e && de(e);
                    if (!Ce.test(e))for (; r < o; r++)for (n = this[r]; n && n !== t; n = n.parentNode)if (n.nodeType < 11 && (a ? a.index(n) > -1 : 1 === n.nodeType && de.find.matchesSelector(n, e))) {
                        i.push(n);
                        break
                    }
                    return this.pushStack(i.length > 1 ? de.uniqueSort(i) : i)
                }, index: function (e) {
                    return e ? "string" == typeof e ? ae.call(de(e), this[0]) : ae.call(this, e.jquery ? e[0] : e) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
                }, add: function (e, t) {
                    return this.pushStack(de.uniqueSort(de.merge(this.get(), de(e, t))))
                }, addBack: function (e) {
                    return this.add(null == e ? this.prevObject : this.prevObject.filter(e))
                }
            }), de.each({
                parent: function (e) {
                    var t = e.parentNode;
                    return t && 11 !== t.nodeType ? t : null
                }, parents: function (e) {
                    return xe(e, "parentNode")
                }, parentsUntil: function (e, t, n) {
                    return xe(e, "parentNode", n)
                }, next: function (e) {
                    return i(e, "nextSibling")
                }, prev: function (e) {
                    return i(e, "previousSibling")
                }, nextAll: function (e) {
                    return xe(e, "nextSibling")
                }, prevAll: function (e) {
                    return xe(e, "previousSibling")
                }, nextUntil: function (e, t, n) {
                    return xe(e, "nextSibling", n)
                }, prevUntil: function (e, t, n) {
                    return xe(e, "previousSibling", n)
                }, siblings: function (e) {
                    return we((e.parentNode || {}).firstChild, e)
                }, children: function (e) {
                    return we(e.firstChild)
                }, contents: function (e) {
                    return e.contentDocument || de.merge([], e.childNodes)
                }
            }, function (e, t) {
                de.fn[e] = function (n, r) {
                    var o = de.map(this, t, n);
                    return "Until" !== e.slice(-5) && (r = n), r && "string" == typeof r && (o = de.filter(r, o)), this.length > 1 && (Ae[e] || de.uniqueSort(o), Se.test(e) && o.reverse()), this.pushStack(o)
                }
            });
            var qe = /[^\x20\t\r\n\f]+/g;
            de.Callbacks = function (e) {
                e = "string" == typeof e ? a(e) : de.extend({}, e);
                var t, n, r, o, i = [], s = [], u = -1, l = function () {
                    for (o = e.once, r = t = !0; s.length; u = -1)for (n = s.shift(); ++u < i.length;)i[u].apply(n[0], n[1]) === !1 && e.stopOnFalse && (u = i.length, n = !1);
                    e.memory || (n = !1), t = !1, o && (i = n ? [] : "")
                }, c = {
                    add: function () {
                        return i && (n && !t && (u = i.length - 1, s.push(n)), function t(n) {
                            de.each(n, function (n, r) {
                                de.isFunction(r) ? e.unique && c.has(r) || i.push(r) : r && r.length && "string" !== de.type(r) && t(r)
                            })
                        }(arguments), n && !t && l()), this
                    }, remove: function () {
                        return de.each(arguments, function (e, t) {
                            for (var n; (n = de.inArray(t, i, n)) > -1;)i.splice(n, 1), n <= u && u--
                        }), this
                    }, has: function (e) {
                        return e ? de.inArray(e, i) > -1 : i.length > 0
                    }, empty: function () {
                        return i && (i = []), this
                    }, disable: function () {
                        return o = s = [], i = n = "", this
                    }, disabled: function () {
                        return !i
                    }, lock: function () {
                        return o = s = [], n || t || (i = n = ""), this
                    }, locked: function () {
                        return !!o
                    }, fireWith: function (e, n) {
                        return o || (n = n || [], n = [e, n.slice ? n.slice() : n], s.push(n), t || l()), this
                    }, fire: function () {
                        return c.fireWith(this, arguments), this
                    }, fired: function () {
                        return !!r
                    }
                };
                return c
            }, de.extend({
                Deferred: function (t) {
                    var n = [["notify", "progress", de.Callbacks("memory"), de.Callbacks("memory"), 2], ["resolve", "done", de.Callbacks("once memory"), de.Callbacks("once memory"), 0, "resolved"], ["reject", "fail", de.Callbacks("once memory"), de.Callbacks("once memory"), 1, "rejected"]],
                        r = "pending", o = {
                            state: function () {
                                return r
                            }, always: function () {
                                return i.done(arguments).fail(arguments), this
                            }, catch: function (e) {
                                return o.then(null, e)
                            }, pipe: function () {
                                var e = arguments;
                                return de.Deferred(function (t) {
                                    de.each(n, function (n, r) {
                                        var o = de.isFunction(e[r[4]]) && e[r[4]];
                                        i[r[1]](function () {
                                            var e = o && o.apply(this, arguments);
                                            e && de.isFunction(e.promise) ? e.promise().progress(t.notify).done(t.resolve).fail(t.reject) : t[r[0] + "With"](this, o ? [e] : arguments)
                                        })
                                    }), e = null
                                }).promise()
                            }, then: function (t, r, o) {
                                function i(t, n, r, o) {
                                    return function () {
                                        var l = this, c = arguments, f = function () {
                                            var e, f;
                                            if (!(t < a)) {
                                                if (e = r.apply(l, c), e === n.promise())throw new TypeError("Thenable self-resolution");
                                                f = e && ("object" == typeof e || "function" == typeof e) && e.then, de.isFunction(f) ? o ? f.call(e, i(a, n, s, o), i(a, n, u, o)) : (a++, f.call(e, i(a, n, s, o), i(a, n, u, o), i(a, n, s, n.notifyWith))) : (r !== s && (l = void 0, c = [e]), (o || n.resolveWith)(l, c))
                                            }
                                        }, p = o ? f : function () {
                                            try {
                                                f()
                                            } catch (e) {
                                                de.Deferred.exceptionHook && de.Deferred.exceptionHook(e, p.stackTrace), t + 1 >= a && (r !== u && (l = void 0, c = [e]), n.rejectWith(l, c))
                                            }
                                        };
                                        t ? p() : (de.Deferred.getStackHook && (p.stackTrace = de.Deferred.getStackHook()), e.setTimeout(p))
                                    }
                                }

                                var a = 0;
                                return de.Deferred(function (e) {
                                    n[0][3].add(i(0, e, de.isFunction(o) ? o : s, e.notifyWith)), n[1][3].add(i(0, e, de.isFunction(t) ? t : s)), n[2][3].add(i(0, e, de.isFunction(r) ? r : u))
                                }).promise()
                            }, promise: function (e) {
                                return null != e ? de.extend(e, o) : o
                            }
                        }, i = {};
                    return de.each(n, function (e, t) {
                        var a = t[2], s = t[5];
                        o[t[1]] = a.add, s && a.add(function () {
                            r = s
                        }, n[3 - e][2].disable, n[0][2].lock), a.add(t[3].fire), i[t[0]] = function () {
                            return i[t[0] + "With"](this === i ? void 0 : this, arguments), this
                        }, i[t[0] + "With"] = a.fireWith
                    }), o.promise(i), t && t.call(i, i), i
                }, when: function (e) {
                    var t = arguments.length, n = t, r = Array(n), o = re.call(arguments), i = de.Deferred(),
                        a = function (e) {
                            return function (n) {
                                r[e] = this, o[e] = arguments.length > 1 ? re.call(arguments) : n, --t || i.resolveWith(r, o)
                            }
                        };
                    if (t <= 1 && (l(e, i.done(a(n)).resolve, i.reject), "pending" === i.state() || de.isFunction(o[n] && o[n].then)))return i.then();
                    for (; n--;)l(o[n], a(n), i.reject);
                    return i.promise()
                }
            });
            var De = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
            de.Deferred.exceptionHook = function (t, n) {
                e.console && e.console.warn && t && De.test(t.name) && e.console.warn("jQuery.Deferred exception: " + t.message, t.stack, n)
            }, de.readyException = function (t) {
                e.setTimeout(function () {
                    throw t
                })
            };
            var Oe = de.Deferred();
            de.fn.ready = function (e) {
                return Oe.then(e).catch(function (e) {
                    de.readyException(e)
                }), this
            }, de.extend({
                isReady: !1, readyWait: 1, holdReady: function (e) {
                    e ? de.readyWait++ : de.ready(!0)
                }, ready: function (e) {
                    (e === !0 ? --de.readyWait : de.isReady) || (de.isReady = !0, e !== !0 && --de.readyWait > 0 || Oe.resolveWith(te, [de]))
                }
            }), de.ready.then = Oe.then, "complete" === te.readyState || "loading" !== te.readyState && !te.documentElement.doScroll ? e.setTimeout(de.ready) : (te.addEventListener("DOMContentLoaded", c), e.addEventListener("load", c));
            var Le = function (e, t, n, r, o, i, a) {
                var s = 0, u = e.length, l = null == n;
                if ("object" === de.type(n)) {
                    o = !0;
                    for (s in n)Le(e, t, s, n[s], !0, i, a)
                } else if (void 0 !== r && (o = !0, de.isFunction(r) || (a = !0), l && (a ? (t.call(e, r), t = null) : (l = t, t = function (e, t, n) {
                        return l.call(de(e), n)
                    })), t))for (; s < u; s++)t(e[s], n, a ? r : r.call(e[s], s, t(e[s], n)));
                return o ? e : l ? t.call(e) : u ? t(e[0], n) : i
            }, He = function (e) {
                return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType
            };
            f.uid = 1, f.prototype = {
                cache: function (e) {
                    var t = e[this.expando];
                    return t || (t = {}, He(e) && (e.nodeType ? e[this.expando] = t : Object.defineProperty(e, this.expando, {
                        value: t,
                        configurable: !0
                    }))), t
                }, set: function (e, t, n) {
                    var r, o = this.cache(e);
                    if ("string" == typeof t) o[de.camelCase(t)] = n; else for (r in t)o[de.camelCase(r)] = t[r];
                    return o
                }, get: function (e, t) {
                    return void 0 === t ? this.cache(e) : e[this.expando] && e[this.expando][de.camelCase(t)]
                }, access: function (e, t, n) {
                    return void 0 === t || t && "string" == typeof t && void 0 === n ? this.get(e, t) : (this.set(e, t, n), void 0 !== n ? n : t)
                }, remove: function (e, t) {
                    var n, r = e[this.expando];
                    if (void 0 !== r) {
                        if (void 0 !== t) {
                            de.isArray(t) ? t = t.map(de.camelCase) : (t = de.camelCase(t), t = t in r ? [t] : t.match(qe) || []), n = t.length;
                            for (; n--;)delete r[t[n]]
                        }
                        (void 0 === t || de.isEmptyObject(r)) && (e.nodeType ? e[this.expando] = void 0 : delete e[this.expando])
                    }
                }, hasData: function (e) {
                    var t = e[this.expando];
                    return void 0 !== t && !de.isEmptyObject(t)
                }
            };
            var Fe = new f, Pe = new f, Ie = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, Re = /[A-Z]/g;
            de.extend({
                hasData: function (e) {
                    return Pe.hasData(e) || Fe.hasData(e)
                }, data: function (e, t, n) {
                    return Pe.access(e, t, n)
                }, removeData: function (e, t) {
                    Pe.remove(e, t)
                }, _data: function (e, t, n) {
                    return Fe.access(e, t, n)
                }, _removeData: function (e, t) {
                    Fe.remove(e, t)
                }
            }), de.fn.extend({
                data: function (e, t) {
                    var n, r, o, i = this[0], a = i && i.attributes;
                    if (void 0 === e) {
                        if (this.length && (o = Pe.get(i), 1 === i.nodeType && !Fe.get(i, "hasDataAttrs"))) {
                            for (n = a.length; n--;)a[n] && (r = a[n].name, 0 === r.indexOf("data-") && (r = de.camelCase(r.slice(5)), h(i, r, o[r])));
                            Fe.set(i, "hasDataAttrs", !0)
                        }
                        return o
                    }
                    return "object" == typeof e ? this.each(function () {
                        Pe.set(this, e)
                    }) : Le(this, function (t) {
                        var n;
                        if (i && void 0 === t) {
                            if (n = Pe.get(i, e), void 0 !== n)return n;
                            if (n = h(i, e), void 0 !== n)return n
                        } else this.each(function () {
                            Pe.set(this, e, t)
                        })
                    }, null, t, arguments.length > 1, null, !0)
                }, removeData: function (e) {
                    return this.each(function () {
                        Pe.remove(this, e)
                    })
                }
            }), de.extend({
                queue: function (e, t, n) {
                    var r;
                    if (e)return t = (t || "fx") + "queue", r = Fe.get(e, t), n && (!r || de.isArray(n) ? r = Fe.access(e, t, de.makeArray(n)) : r.push(n)), r || []
                }, dequeue: function (e, t) {
                    t = t || "fx";
                    var n = de.queue(e, t), r = n.length, o = n.shift(), i = de._queueHooks(e, t), a = function () {
                        de.dequeue(e, t)
                    };
                    "inprogress" === o && (o = n.shift(), r--), o && ("fx" === t && n.unshift("inprogress"), delete i.stop, o.call(e, a, i)), !r && i && i.empty.fire()
                }, _queueHooks: function (e, t) {
                    var n = t + "queueHooks";
                    return Fe.get(e, n) || Fe.access(e, n, {
                            empty: de.Callbacks("once memory").add(function () {
                                Fe.remove(e, [t + "queue", n])
                            })
                        })
                }
            }), de.fn.extend({
                queue: function (e, t) {
                    var n = 2;
                    return "string" != typeof e && (t = e, e = "fx", n--), arguments.length < n ? de.queue(this[0], e) : void 0 === t ? this : this.each(function () {
                        var n = de.queue(this, e, t);
                        de._queueHooks(this, e), "fx" === e && "inprogress" !== n[0] && de.dequeue(this, e)
                    })
                }, dequeue: function (e) {
                    return this.each(function () {
                        de.dequeue(this, e)
                    })
                }, clearQueue: function (e) {
                    return this.queue(e || "fx", [])
                }, promise: function (e, t) {
                    var n, r = 1, o = de.Deferred(), i = this, a = this.length, s = function () {
                        --r || o.resolveWith(i, [i])
                    };
                    for ("string" != typeof e && (t = e, e = void 0), e = e || "fx"; a--;)n = Fe.get(i[a], e + "queueHooks"), n && n.empty && (r++, n.empty.add(s));
                    return s(), o.promise(t)
                }
            });
            var Me = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
                $e = new RegExp("^(?:([+-])=|)(" + Me + ")([a-z%]*)$", "i"), _e = ["Top", "Right", "Bottom", "Left"],
                We = function (e, t) {
                    return e = t || e, "none" === e.style.display || "" === e.style.display && de.contains(e.ownerDocument, e) && "none" === de.css(e, "display")
                }, Be = function (e, t, n, r) {
                    var o, i, a = {};
                    for (i in t)a[i] = e.style[i], e.style[i] = t[i];
                    o = n.apply(e, r || []);
                    for (i in t)e.style[i] = a[i];
                    return o
                }, Ue = {};
            de.fn.extend({
                show: function () {
                    return m(this, !0)
                }, hide: function () {
                    return m(this)
                }, toggle: function (e) {
                    return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function () {
                        We(this) ? de(this).show() : de(this).hide()
                    })
                }
            });
            var ze = /^(?:checkbox|radio)$/i, Xe = /<([a-z][^\/\0>\x20\t\r\n\f]+)/i, Ke = /^$|\/(?:java|ecma)script/i,
                Ve = {
                    option: [1, "<select multiple='multiple'>", "</select>"],
                    thead: [1, "<table>", "</table>"],
                    col: [2, "<table><colgroup>", "</colgroup></table>"],
                    tr: [2, "<table><tbody>", "</tbody></table>"],
                    td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
                    _default: [0, "", ""]
                };
            Ve.optgroup = Ve.option, Ve.tbody = Ve.tfoot = Ve.colgroup = Ve.caption = Ve.thead, Ve.th = Ve.td;
            var Ge = /<|&#?\w+;/;
            !function () {
                var e = te.createDocumentFragment(), t = e.appendChild(te.createElement("div")),
                    n = te.createElement("input");
                n.setAttribute("type", "radio"), n.setAttribute("checked", "checked"), n.setAttribute("name", "t"), t.appendChild(n), pe.checkClone = t.cloneNode(!0).cloneNode(!0).lastChild.checked, t.innerHTML = "<textarea>x</textarea>", pe.noCloneChecked = !!t.cloneNode(!0).lastChild.defaultValue
            }();
            var Ye = te.documentElement, Qe = /^key/, Je = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
                Ze = /^([^.]*)(?:\.(.+)|)/;
            de.event = {
                global: {}, add: function (e, t, n, r, o) {
                    var i, a, s, u, l, c, f, p, h, d, g, m = Fe.get(e);
                    if (m)for (n.handler && (i = n, n = i.handler, o = i.selector), o && de.find.matchesSelector(Ye, o), n.guid || (n.guid = de.guid++), (u = m.events) || (u = m.events = {}), (a = m.handle) || (a = m.handle = function (t) {
                        return "undefined" != typeof de && de.event.triggered !== t.type ? de.event.dispatch.apply(e, arguments) : void 0
                    }), t = (t || "").match(qe) || [""], l = t.length; l--;)s = Ze.exec(t[l]) || [], h = g = s[1], d = (s[2] || "").split(".").sort(), h && (f = de.event.special[h] || {}, h = (o ? f.delegateType : f.bindType) || h, f = de.event.special[h] || {}, c = de.extend({
                        type: h,
                        origType: g,
                        data: r,
                        handler: n,
                        guid: n.guid,
                        selector: o,
                        needsContext: o && de.expr.match.needsContext.test(o),
                        namespace: d.join(".")
                    }, i), (p = u[h]) || (p = u[h] = [], p.delegateCount = 0, f.setup && f.setup.call(e, r, d, a) !== !1 || e.addEventListener && e.addEventListener(h, a)), f.add && (f.add.call(e, c), c.handler.guid || (c.handler.guid = n.guid)), o ? p.splice(p.delegateCount++, 0, c) : p.push(c), de.event.global[h] = !0)
                }, remove: function (e, t, n, r, o) {
                    var i, a, s, u, l, c, f, p, h, d, g, m = Fe.hasData(e) && Fe.get(e);
                    if (m && (u = m.events)) {
                        for (t = (t || "").match(qe) || [""], l = t.length; l--;)if (s = Ze.exec(t[l]) || [], h = g = s[1], d = (s[2] || "").split(".").sort(), h) {
                            for (f = de.event.special[h] || {}, h = (r ? f.delegateType : f.bindType) || h, p = u[h] || [], s = s[2] && new RegExp("(^|\\.)" + d.join("\\.(?:.*\\.|)") + "(\\.|$)"), a = i = p.length; i--;)c = p[i], !o && g !== c.origType || n && n.guid !== c.guid || s && !s.test(c.namespace) || r && r !== c.selector && ("**" !== r || !c.selector) || (p.splice(i, 1), c.selector && p.delegateCount--, f.remove && f.remove.call(e, c));
                            a && !p.length && (f.teardown && f.teardown.call(e, d, m.handle) !== !1 || de.removeEvent(e, h, m.handle), delete u[h])
                        } else for (h in u)de.event.remove(e, h + t[l], n, r, !0);
                        de.isEmptyObject(u) && Fe.remove(e, "handle events")
                    }
                }, dispatch: function (e) {
                    var t, n, r, o, i, a, s = de.event.fix(e), u = new Array(arguments.length),
                        l = (Fe.get(this, "events") || {})[s.type] || [], c = de.event.special[s.type] || {};
                    for (u[0] = s, t = 1; t < arguments.length; t++)u[t] = arguments[t];
                    if (s.delegateTarget = this, !c.preDispatch || c.preDispatch.call(this, s) !== !1) {
                        for (a = de.event.handlers.call(this, s, l), t = 0; (o = a[t++]) && !s.isPropagationStopped();)for (s.currentTarget = o.elem, n = 0; (i = o.handlers[n++]) && !s.isImmediatePropagationStopped();)s.rnamespace && !s.rnamespace.test(i.namespace) || (s.handleObj = i, s.data = i.data, r = ((de.event.special[i.origType] || {}).handle || i.handler).apply(o.elem, u), void 0 !== r && (s.result = r) === !1 && (s.preventDefault(), s.stopPropagation()));
                        return c.postDispatch && c.postDispatch.call(this, s), s.result
                    }
                }, handlers: function (e, t) {
                    var n, r, o, i, a, s = [], u = t.delegateCount, l = e.target;
                    if (u && l.nodeType && !("click" === e.type && e.button >= 1))for (; l !== this; l = l.parentNode || this)if (1 === l.nodeType && ("click" !== e.type || l.disabled !== !0)) {
                        for (i = [], a = {}, n = 0; n < u; n++)r = t[n], o = r.selector + " ", void 0 === a[o] && (a[o] = r.needsContext ? de(o, this).index(l) > -1 : de.find(o, this, null, [l]).length), a[o] && i.push(r);
                        i.length && s.push({elem: l, handlers: i})
                    }
                    return l = this, u < t.length && s.push({elem: l, handlers: t.slice(u)}), s
                }, addProp: function (e, t) {
                    Object.defineProperty(de.Event.prototype, e, {
                        enumerable: !0,
                        configurable: !0,
                        get: de.isFunction(t) ? function () {
                            if (this.originalEvent)return t(this.originalEvent)
                        } : function () {
                            if (this.originalEvent)return this.originalEvent[e]
                        },
                        set: function (t) {
                            Object.defineProperty(this, e, {enumerable: !0, configurable: !0, writable: !0, value: t})
                        }
                    })
                }, fix: function (e) {
                    return e[de.expando] ? e : new de.Event(e)
                }, special: {
                    load: {noBubble: !0}, focus: {
                        trigger: function () {
                            if (this !== C() && this.focus)return this.focus(), !1
                        }, delegateType: "focusin"
                    }, blur: {
                        trigger: function () {
                            if (this === C() && this.blur)return this.blur(), !1
                        }, delegateType: "focusout"
                    }, click: {
                        trigger: function () {
                            if ("checkbox" === this.type && this.click && de.nodeName(this, "input"))return this.click(), !1
                        }, _default: function (e) {
                            return de.nodeName(e.target, "a")
                        }
                    }, beforeunload: {
                        postDispatch: function (e) {
                            void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result)
                        }
                    }
                }
            }, de.removeEvent = function (e, t, n) {
                e.removeEventListener && e.removeEventListener(t, n)
            }, de.Event = function (e, t) {
                return this instanceof de.Event ? (e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || void 0 === e.defaultPrevented && e.returnValue === !1 ? x : w, this.target = e.target && 3 === e.target.nodeType ? e.target.parentNode : e.target, this.currentTarget = e.currentTarget, this.relatedTarget = e.relatedTarget) : this.type = e, t && de.extend(this, t), this.timeStamp = e && e.timeStamp || de.now(), void(this[de.expando] = !0)) : new de.Event(e, t)
            }, de.Event.prototype = {
                constructor: de.Event,
                isDefaultPrevented: w,
                isPropagationStopped: w,
                isImmediatePropagationStopped: w,
                isSimulated: !1,
                preventDefault: function () {
                    var e = this.originalEvent;
                    this.isDefaultPrevented = x, e && !this.isSimulated && e.preventDefault()
                },
                stopPropagation: function () {
                    var e = this.originalEvent;
                    this.isPropagationStopped = x, e && !this.isSimulated && e.stopPropagation()
                },
                stopImmediatePropagation: function () {
                    var e = this.originalEvent;
                    this.isImmediatePropagationStopped = x, e && !this.isSimulated && e.stopImmediatePropagation(), this.stopPropagation()
                }
            }, de.each({
                altKey: !0,
                bubbles: !0,
                cancelable: !0,
                changedTouches: !0,
                ctrlKey: !0,
                detail: !0,
                eventPhase: !0,
                metaKey: !0,
                pageX: !0,
                pageY: !0,
                shiftKey: !0,
                view: !0,
                char: !0,
                charCode: !0,
                key: !0,
                keyCode: !0,
                button: !0,
                buttons: !0,
                clientX: !0,
                clientY: !0,
                offsetX: !0,
                offsetY: !0,
                pointerId: !0,
                pointerType: !0,
                screenX: !0,
                screenY: !0,
                targetTouches: !0,
                toElement: !0,
                touches: !0,
                which: function (e) {
                    var t = e.button;
                    return null == e.which && Qe.test(e.type) ? null != e.charCode ? e.charCode : e.keyCode : !e.which && void 0 !== t && Je.test(e.type) ? 1 & t ? 1 : 2 & t ? 3 : 4 & t ? 2 : 0 : e.which
                }
            }, de.event.addProp), de.each({
                mouseenter: "mouseover",
                mouseleave: "mouseout",
                pointerenter: "pointerover",
                pointerleave: "pointerout"
            }, function (e, t) {
                de.event.special[e] = {
                    delegateType: t, bindType: t, handle: function (e) {
                        var n, r = this, o = e.relatedTarget, i = e.handleObj;
                        return o && (o === r || de.contains(r, o)) || (e.type = i.origType, n = i.handler.apply(this, arguments), e.type = t), n
                    }
                }
            }), de.fn.extend({
                on: function (e, t, n, r) {
                    return T(this, e, t, n, r)
                }, one: function (e, t, n, r) {
                    return T(this, e, t, n, r, 1)
                }, off: function (e, t, n) {
                    var r, o;
                    if (e && e.preventDefault && e.handleObj)return r = e.handleObj, de(e.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace : r.origType, r.selector, r.handler), this;
                    if ("object" == typeof e) {
                        for (o in e)this.off(o, t, e[o]);
                        return this
                    }
                    return t !== !1 && "function" != typeof t || (n = t, t = void 0), n === !1 && (n = w), this.each(function () {
                        de.event.remove(this, e, n, t)
                    })
                }
            });
            var et = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
                tt = /<script|<style|<link/i, nt = /checked\s*(?:[^=]|=\s*.checked.)/i, rt = /^true\/(.*)/,
                ot = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
            de.extend({
                htmlPrefilter: function (e) {
                    return e.replace(et, "<$1></$2>")
                }, clone: function (e, t, n) {
                    var r, o, i, a, s = e.cloneNode(!0), u = de.contains(e.ownerDocument, e);
                    if (!(pe.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || de.isXMLDoc(e)))for (a = v(s), i = v(e), r = 0, o = i.length; r < o; r++)S(i[r], a[r]);
                    if (t)if (n)for (i = i || v(e), a = a || v(s), r = 0, o = i.length; r < o; r++)N(i[r], a[r]); else N(e, s);
                    return a = v(s, "script"), a.length > 0 && y(a, !u && v(e, "script")), s
                }, cleanData: function (e) {
                    for (var t, n, r, o = de.event.special, i = 0; void 0 !== (n = e[i]); i++)if (He(n)) {
                        if (t = n[Fe.expando]) {
                            if (t.events)for (r in t.events)o[r] ? de.event.remove(n, r) : de.removeEvent(n, r, t.handle);
                            n[Fe.expando] = void 0
                        }
                        n[Pe.expando] && (n[Pe.expando] = void 0)
                    }
                }
            }), de.fn.extend({
                detach: function (e) {
                    return q(this, e, !0)
                }, remove: function (e) {
                    return q(this, e)
                }, text: function (e) {
                    return Le(this, function (e) {
                        return void 0 === e ? de.text(this) : this.empty().each(function () {
                            1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || (this.textContent = e)
                        })
                    }, null, e, arguments.length)
                }, append: function () {
                    return A(this, arguments, function (e) {
                        if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                            var t = k(this, e);
                            t.appendChild(e)
                        }
                    })
                }, prepend: function () {
                    return A(this, arguments, function (e) {
                        if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                            var t = k(this, e);
                            t.insertBefore(e, t.firstChild)
                        }
                    })
                }, before: function () {
                    return A(this, arguments, function (e) {
                        this.parentNode && this.parentNode.insertBefore(e, this)
                    })
                }, after: function () {
                    return A(this, arguments, function (e) {
                        this.parentNode && this.parentNode.insertBefore(e, this.nextSibling)
                    })
                }, empty: function () {
                    for (var e, t = 0; null != (e = this[t]); t++)1 === e.nodeType && (de.cleanData(v(e, !1)), e.textContent = "");
                    return this
                }, clone: function (e, t) {
                    return e = null != e && e, t = null == t ? e : t, this.map(function () {
                        return de.clone(this, e, t)
                    })
                }, html: function (e) {
                    return Le(this, function (e) {
                        var t = this[0] || {}, n = 0, r = this.length;
                        if (void 0 === e && 1 === t.nodeType)return t.innerHTML;
                        if ("string" == typeof e && !tt.test(e) && !Ve[(Xe.exec(e) || ["", ""])[1].toLowerCase()]) {
                            e = de.htmlPrefilter(e);
                            try {
                                for (; n < r; n++)t = this[n] || {}, 1 === t.nodeType && (de.cleanData(v(t, !1)), t.innerHTML = e);
                                t = 0
                            } catch (e) {
                            }
                        }
                        t && this.empty().append(e)
                    }, null, e, arguments.length)
                }, replaceWith: function () {
                    var e = [];
                    return A(this, arguments, function (t) {
                        var n = this.parentNode;
                        de.inArray(this, e) < 0 && (de.cleanData(v(this)), n && n.replaceChild(t, this))
                    }, e)
                }
            }), de.each({
                appendTo: "append",
                prependTo: "prepend",
                insertBefore: "before",
                insertAfter: "after",
                replaceAll: "replaceWith"
            }, function (e, t) {
                de.fn[e] = function (e) {
                    for (var n, r = [], o = de(e), i = o.length - 1, a = 0; a <= i; a++)n = a === i ? this : this.clone(!0), de(o[a])[t](n), ie.apply(r, n.get());
                    return this.pushStack(r)
                }
            });
            var it = /^margin/, at = new RegExp("^(" + Me + ")(?!px)[a-z%]+$", "i"), st = function (t) {
                var n = t.ownerDocument.defaultView;
                return n && n.opener || (n = e), n.getComputedStyle(t)
            };
            !function () {
                function t() {
                    if (s) {
                        s.style.cssText = "box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%", s.innerHTML = "", Ye.appendChild(a);
                        var t = e.getComputedStyle(s);
                        n = "1%" !== t.top, i = "2px" === t.marginLeft, r = "4px" === t.width, s.style.marginRight = "50%", o = "4px" === t.marginRight, Ye.removeChild(a), s = null
                    }
                }

                var n, r, o, i, a = te.createElement("div"), s = te.createElement("div");
                s.style && (s.style.backgroundClip = "content-box", s.cloneNode(!0).style.backgroundClip = "", pe.clearCloneStyle = "content-box" === s.style.backgroundClip, a.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute", a.appendChild(s), de.extend(pe, {
                    pixelPosition: function () {
                        return t(), n
                    }, boxSizingReliable: function () {
                        return t(), r
                    }, pixelMarginRight: function () {
                        return t(), o
                    }, reliableMarginLeft: function () {
                        return t(), i
                    }
                }))
            }();
            var ut = /^(none|table(?!-c[ea]).+)/, lt = {position: "absolute", visibility: "hidden", display: "block"},
                ct = {letterSpacing: "0", fontWeight: "400"}, ft = ["Webkit", "Moz", "ms"],
                pt = te.createElement("div").style;
            de.extend({
                cssHooks: {
                    opacity: {
                        get: function (e, t) {
                            if (t) {
                                var n = D(e, "opacity");
                                return "" === n ? "1" : n
                            }
                        }
                    }
                },
                cssNumber: {
                    animationIterationCount: !0,
                    columnCount: !0,
                    fillOpacity: !0,
                    flexGrow: !0,
                    flexShrink: !0,
                    fontWeight: !0,
                    lineHeight: !0,
                    opacity: !0,
                    order: !0,
                    orphans: !0,
                    widows: !0,
                    zIndex: !0,
                    zoom: !0
                },
                cssProps: {float: "cssFloat"},
                style: function (e, t, n, r) {
                    if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) {
                        var o, i, a, s = de.camelCase(t), u = e.style;
                        return t = de.cssProps[s] || (de.cssProps[s] = L(s) || s), a = de.cssHooks[t] || de.cssHooks[s], void 0 === n ? a && "get" in a && void 0 !== (o = a.get(e, !1, r)) ? o : u[t] : (i = typeof n, "string" === i && (o = $e.exec(n)) && o[1] && (n = d(e, t, o), i = "number"), null != n && n === n && ("number" === i && (n += o && o[3] || (de.cssNumber[s] ? "" : "px")), pe.clearCloneStyle || "" !== n || 0 !== t.indexOf("background") || (u[t] = "inherit"), a && "set" in a && void 0 === (n = a.set(e, n, r)) || (u[t] = n)), void 0)
                    }
                },
                css: function (e, t, n, r) {
                    var o, i, a, s = de.camelCase(t);
                    return t = de.cssProps[s] || (de.cssProps[s] = L(s) || s), a = de.cssHooks[t] || de.cssHooks[s], a && "get" in a && (o = a.get(e, !0, n)), void 0 === o && (o = D(e, t, r)), "normal" === o && t in ct && (o = ct[t]), "" === n || n ? (i = parseFloat(o), n === !0 || isFinite(i) ? i || 0 : o) : o
                }
            }), de.each(["height", "width"], function (e, t) {
                de.cssHooks[t] = {
                    get: function (e, n, r) {
                        if (n)return !ut.test(de.css(e, "display")) || e.getClientRects().length && e.getBoundingClientRect().width ? P(e, t, r) : Be(e, lt, function () {
                            return P(e, t, r)
                        })
                    }, set: function (e, n, r) {
                        var o, i = r && st(e), a = r && F(e, t, r, "border-box" === de.css(e, "boxSizing", !1, i), i);
                        return a && (o = $e.exec(n)) && "px" !== (o[3] || "px") && (e.style[t] = n, n = de.css(e, t)), H(e, n, a)
                    }
                }
            }), de.cssHooks.marginLeft = O(pe.reliableMarginLeft, function (e, t) {
                if (t)return (parseFloat(D(e, "marginLeft")) || e.getBoundingClientRect().left - Be(e, {marginLeft: 0}, function () {
                        return e.getBoundingClientRect().left
                    })) + "px"
            }), de.each({margin: "", padding: "", border: "Width"}, function (e, t) {
                de.cssHooks[e + t] = {
                    expand: function (n) {
                        for (var r = 0, o = {}, i = "string" == typeof n ? n.split(" ") : [n]; r < 4; r++)o[e + _e[r] + t] = i[r] || i[r - 2] || i[0];
                        return o
                    }
                }, it.test(e) || (de.cssHooks[e + t].set = H)
            }), de.fn.extend({
                css: function (e, t) {
                    return Le(this, function (e, t, n) {
                        var r, o, i = {}, a = 0;
                        if (de.isArray(t)) {
                            for (r = st(e), o = t.length; a < o; a++)i[t[a]] = de.css(e, t[a], !1, r);
                            return i
                        }
                        return void 0 !== n ? de.style(e, t, n) : de.css(e, t)
                    }, e, t, arguments.length > 1)
                }
            }), de.Tween = I, I.prototype = {
                constructor: I, init: function (e, t, n, r, o, i) {
                    this.elem = e, this.prop = n, this.easing = o || de.easing._default, this.options = t, this.start = this.now = this.cur(), this.end = r, this.unit = i || (de.cssNumber[n] ? "" : "px")
                }, cur: function () {
                    var e = I.propHooks[this.prop];
                    return e && e.get ? e.get(this) : I.propHooks._default.get(this)
                }, run: function (e) {
                    var t, n = I.propHooks[this.prop];
                    return this.options.duration ? this.pos = t = de.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e, this.now = (this.end - this.start) * t + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), n && n.set ? n.set(this) : I.propHooks._default.set(this), this
                }
            }, I.prototype.init.prototype = I.prototype, I.propHooks = {
                _default: {
                    get: function (e) {
                        var t;
                        return 1 !== e.elem.nodeType || null != e.elem[e.prop] && null == e.elem.style[e.prop] ? e.elem[e.prop] : (t = de.css(e.elem, e.prop, ""), t && "auto" !== t ? t : 0)
                    }, set: function (e) {
                        de.fx.step[e.prop] ? de.fx.step[e.prop](e) : 1 !== e.elem.nodeType || null == e.elem.style[de.cssProps[e.prop]] && !de.cssHooks[e.prop] ? e.elem[e.prop] = e.now : de.style(e.elem, e.prop, e.now + e.unit)
                    }
                }
            }, I.propHooks.scrollTop = I.propHooks.scrollLeft = {
                set: function (e) {
                    e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now)
                }
            }, de.easing = {
                linear: function (e) {
                    return e
                }, swing: function (e) {
                    return .5 - Math.cos(e * Math.PI) / 2
                }, _default: "swing"
            }, de.fx = I.prototype.init, de.fx.step = {};
            var ht, dt, gt = /^(?:toggle|show|hide)$/, mt = /queueHooks$/;
            de.Animation = de.extend(U, {
                tweeners: {
                    "*": [function (e, t) {
                        var n = this.createTween(e, t);
                        return d(n.elem, e, $e.exec(t), n), n
                    }]
                }, tweener: function (e, t) {
                    de.isFunction(e) ? (t = e, e = ["*"]) : e = e.match(qe);
                    for (var n, r = 0, o = e.length; r < o; r++)n = e[r], U.tweeners[n] = U.tweeners[n] || [], U.tweeners[n].unshift(t)
                }, prefilters: [W], prefilter: function (e, t) {
                    t ? U.prefilters.unshift(e) : U.prefilters.push(e)
                }
            }), de.speed = function (e, t, n) {
                var r = e && "object" == typeof e ? de.extend({}, e) : {
                    complete: n || !n && t || de.isFunction(e) && e,
                    duration: e,
                    easing: n && t || t && !de.isFunction(t) && t
                };
                return de.fx.off || te.hidden ? r.duration = 0 : "number" != typeof r.duration && (r.duration in de.fx.speeds ? r.duration = de.fx.speeds[r.duration] : r.duration = de.fx.speeds._default), null != r.queue && r.queue !== !0 || (r.queue = "fx"), r.old = r.complete, r.complete = function () {
                    de.isFunction(r.old) && r.old.call(this), r.queue && de.dequeue(this, r.queue)
                }, r
            }, de.fn.extend({
                fadeTo: function (e, t, n, r) {
                    return this.filter(We).css("opacity", 0).show().end().animate({opacity: t}, e, n, r)
                }, animate: function (e, t, n, r) {
                    var o = de.isEmptyObject(e), i = de.speed(t, n, r), a = function () {
                        var t = U(this, de.extend({}, e), i);
                        (o || Fe.get(this, "finish")) && t.stop(!0)
                    };
                    return a.finish = a, o || i.queue === !1 ? this.each(a) : this.queue(i.queue, a)
                }, stop: function (e, t, n) {
                    var r = function (e) {
                        var t = e.stop;
                        delete e.stop, t(n)
                    };
                    return "string" != typeof e && (n = t, t = e, e = void 0), t && e !== !1 && this.queue(e || "fx", []), this.each(function () {
                        var t = !0, o = null != e && e + "queueHooks", i = de.timers, a = Fe.get(this);
                        if (o) a[o] && a[o].stop && r(a[o]); else for (o in a)a[o] && a[o].stop && mt.test(o) && r(a[o]);
                        for (o = i.length; o--;)i[o].elem !== this || null != e && i[o].queue !== e || (i[o].anim.stop(n), t = !1, i.splice(o, 1));
                        !t && n || de.dequeue(this, e)
                    })
                }, finish: function (e) {
                    return e !== !1 && (e = e || "fx"), this.each(function () {
                        var t, n = Fe.get(this), r = n[e + "queue"], o = n[e + "queueHooks"], i = de.timers,
                            a = r ? r.length : 0;
                        for (n.finish = !0, de.queue(this, e, []), o && o.stop && o.stop.call(this, !0), t = i.length; t--;)i[t].elem === this && i[t].queue === e && (i[t].anim.stop(!0), i.splice(t, 1));
                        for (t = 0; t < a; t++)r[t] && r[t].finish && r[t].finish.call(this);
                        delete n.finish
                    })
                }
            }), de.each(["toggle", "show", "hide"], function (e, t) {
                var n = de.fn[t];
                de.fn[t] = function (e, r, o) {
                    return null == e || "boolean" == typeof e ? n.apply(this, arguments) : this.animate($(t, !0), e, r, o)
                }
            }), de.each({
                slideDown: $("show"),
                slideUp: $("hide"),
                slideToggle: $("toggle"),
                fadeIn: {opacity: "show"},
                fadeOut: {opacity: "hide"},
                fadeToggle: {opacity: "toggle"}
            }, function (e, t) {
                de.fn[e] = function (e, n, r) {
                    return this.animate(t, e, n, r)
                }
            }), de.timers = [], de.fx.tick = function () {
                var e, t = 0, n = de.timers;
                for (ht = de.now(); t < n.length; t++)e = n[t], e() || n[t] !== e || n.splice(t--, 1);
                n.length || de.fx.stop(), ht = void 0
            }, de.fx.timer = function (e) {
                de.timers.push(e), e() ? de.fx.start() : de.timers.pop()
            }, de.fx.interval = 13, de.fx.start = function () {
                dt || (dt = e.requestAnimationFrame ? e.requestAnimationFrame(R) : e.setInterval(de.fx.tick, de.fx.interval))
            }, de.fx.stop = function () {
                e.cancelAnimationFrame ? e.cancelAnimationFrame(dt) : e.clearInterval(dt), dt = null
            }, de.fx.speeds = {slow: 600, fast: 200, _default: 400}, de.fn.delay = function (t, n) {
                return t = de.fx ? de.fx.speeds[t] || t : t, n = n || "fx", this.queue(n, function (n, r) {
                    var o = e.setTimeout(n, t);
                    r.stop = function () {
                        e.clearTimeout(o)
                    }
                })
            }, function () {
                var e = te.createElement("input"), t = te.createElement("select"),
                    n = t.appendChild(te.createElement("option"));
                e.type = "checkbox", pe.checkOn = "" !== e.value, pe.optSelected = n.selected, e = te.createElement("input"), e.value = "t", e.type = "radio", pe.radioValue = "t" === e.value
            }();
            var vt, yt = de.expr.attrHandle;
            de.fn.extend({
                attr: function (e, t) {
                    return Le(this, de.attr, e, t, arguments.length > 1)
                }, removeAttr: function (e) {
                    return this.each(function () {
                        de.removeAttr(this, e)
                    })
                }
            }), de.extend({
                attr: function (e, t, n) {
                    var r, o, i = e.nodeType;
                    if (3 !== i && 8 !== i && 2 !== i)return "undefined" == typeof e.getAttribute ? de.prop(e, t, n) : (1 === i && de.isXMLDoc(e) || (o = de.attrHooks[t.toLowerCase()] || (de.expr.match.bool.test(t) ? vt : void 0)), void 0 !== n ? null === n ? void de.removeAttr(e, t) : o && "set" in o && void 0 !== (r = o.set(e, n, t)) ? r : (e.setAttribute(t, n + ""), n) : o && "get" in o && null !== (r = o.get(e, t)) ? r : (r = de.find.attr(e, t), null == r ? void 0 : r))
                }, attrHooks: {
                    type: {
                        set: function (e, t) {
                            if (!pe.radioValue && "radio" === t && de.nodeName(e, "input")) {
                                var n = e.value;
                                return e.setAttribute("type", t), n && (e.value = n), t
                            }
                        }
                    }
                }, removeAttr: function (e, t) {
                    var n, r = 0, o = t && t.match(qe);
                    if (o && 1 === e.nodeType)for (; n = o[r++];)e.removeAttribute(n)
                }
            }), vt = {
                set: function (e, t, n) {
                    return t === !1 ? de.removeAttr(e, n) : e.setAttribute(n, n), n
                }
            }, de.each(de.expr.match.bool.source.match(/\w+/g), function (e, t) {
                var n = yt[t] || de.find.attr;
                yt[t] = function (e, t, r) {
                    var o, i, a = t.toLowerCase();
                    return r || (i = yt[a], yt[a] = o, o = null != n(e, t, r) ? a : null, yt[a] = i), o
                }
            });
            var bt = /^(?:input|select|textarea|button)$/i, xt = /^(?:a|area)$/i;
            de.fn.extend({
                prop: function (e, t) {
                    return Le(this, de.prop, e, t, arguments.length > 1)
                }, removeProp: function (e) {
                    return this.each(function () {
                        delete this[de.propFix[e] || e]
                    })
                }
            }), de.extend({
                prop: function (e, t, n) {
                    var r, o, i = e.nodeType;
                    if (3 !== i && 8 !== i && 2 !== i)return 1 === i && de.isXMLDoc(e) || (t = de.propFix[t] || t, o = de.propHooks[t]), void 0 !== n ? o && "set" in o && void 0 !== (r = o.set(e, n, t)) ? r : e[t] = n : o && "get" in o && null !== (r = o.get(e, t)) ? r : e[t]
                }, propHooks: {
                    tabIndex: {
                        get: function (e) {
                            var t = de.find.attr(e, "tabindex");
                            return t ? parseInt(t, 10) : bt.test(e.nodeName) || xt.test(e.nodeName) && e.href ? 0 : -1
                        }
                    }
                }, propFix: {for: "htmlFor", class: "className"}
            }), pe.optSelected || (de.propHooks.selected = {
                get: function (e) {
                    var t = e.parentNode;
                    return t && t.parentNode && t.parentNode.selectedIndex, null
                }, set: function (e) {
                    var t = e.parentNode;
                    t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex)
                }
            }), de.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () {
                de.propFix[this.toLowerCase()] = this
            }), de.fn.extend({
                addClass: function (e) {
                    var t, n, r, o, i, a, s, u = 0;
                    if (de.isFunction(e))return this.each(function (t) {
                        de(this).addClass(e.call(this, t, X(this)))
                    });
                    if ("string" == typeof e && e)for (t = e.match(qe) || []; n = this[u++];)if (o = X(n), r = 1 === n.nodeType && " " + z(o) + " ") {
                        for (a = 0; i = t[a++];)r.indexOf(" " + i + " ") < 0 && (r += i + " ");
                        s = z(r), o !== s && n.setAttribute("class", s)
                    }
                    return this
                }, removeClass: function (e) {
                    var t, n, r, o, i, a, s, u = 0;
                    if (de.isFunction(e))return this.each(function (t) {
                        de(this).removeClass(e.call(this, t, X(this)))
                    });
                    if (!arguments.length)return this.attr("class", "");
                    if ("string" == typeof e && e)for (t = e.match(qe) || []; n = this[u++];)if (o = X(n), r = 1 === n.nodeType && " " + z(o) + " ") {
                        for (a = 0; i = t[a++];)for (; r.indexOf(" " + i + " ") > -1;)r = r.replace(" " + i + " ", " ");
                        s = z(r), o !== s && n.setAttribute("class", s)
                    }
                    return this
                }, toggleClass: function (e, t) {
                    var n = typeof e;
                    return "boolean" == typeof t && "string" === n ? t ? this.addClass(e) : this.removeClass(e) : de.isFunction(e) ? this.each(function (n) {
                        de(this).toggleClass(e.call(this, n, X(this), t), t)
                    }) : this.each(function () {
                        var t, r, o, i;
                        if ("string" === n)for (r = 0, o = de(this), i = e.match(qe) || []; t = i[r++];)o.hasClass(t) ? o.removeClass(t) : o.addClass(t); else void 0 !== e && "boolean" !== n || (t = X(this), t && Fe.set(this, "__className__", t), this.setAttribute && this.setAttribute("class", t || e === !1 ? "" : Fe.get(this, "__className__") || ""))
                    })
                }, hasClass: function (e) {
                    var t, n, r = 0;
                    for (t = " " + e + " "; n = this[r++];)if (1 === n.nodeType && (" " + z(X(n)) + " ").indexOf(t) > -1)return !0;
                    return !1
                }
            });
            var wt = /\r/g;
            de.fn.extend({
                val: function (e) {
                    var t, n, r, o = this[0];
                    {
                        if (arguments.length)return r = de.isFunction(e), this.each(function (n) {
                            var o;
                            1 === this.nodeType && (o = r ? e.call(this, n, de(this).val()) : e, null == o ? o = "" : "number" == typeof o ? o += "" : de.isArray(o) && (o = de.map(o, function (e) {
                                    return null == e ? "" : e + ""
                                })), t = de.valHooks[this.type] || de.valHooks[this.nodeName.toLowerCase()], t && "set" in t && void 0 !== t.set(this, o, "value") || (this.value = o))
                        });
                        if (o)return t = de.valHooks[o.type] || de.valHooks[o.nodeName.toLowerCase()], t && "get" in t && void 0 !== (n = t.get(o, "value")) ? n : (n = o.value, "string" == typeof n ? n.replace(wt, "") : null == n ? "" : n)
                    }
                }
            }), de.extend({
                valHooks: {
                    option: {
                        get: function (e) {
                            var t = de.find.attr(e, "value");
                            return null != t ? t : z(de.text(e))
                        }
                    }, select: {
                        get: function (e) {
                            var t, n, r, o = e.options, i = e.selectedIndex, a = "select-one" === e.type,
                                s = a ? null : [], u = a ? i + 1 : o.length;
                            for (r = i < 0 ? u : a ? i : 0; r < u; r++)if (n = o[r], (n.selected || r === i) && !n.disabled && (!n.parentNode.disabled || !de.nodeName(n.parentNode, "optgroup"))) {
                                if (t = de(n).val(), a)return t;
                                s.push(t)
                            }
                            return s
                        }, set: function (e, t) {
                            for (var n, r, o = e.options, i = de.makeArray(t), a = o.length; a--;)r = o[a], (r.selected = de.inArray(de.valHooks.option.get(r), i) > -1) && (n = !0);
                            return n || (e.selectedIndex = -1), i
                        }
                    }
                }
            }), de.each(["radio", "checkbox"], function () {
                de.valHooks[this] = {
                    set: function (e, t) {
                        if (de.isArray(t))return e.checked = de.inArray(de(e).val(), t) > -1
                    }
                }, pe.checkOn || (de.valHooks[this].get = function (e) {
                    return null === e.getAttribute("value") ? "on" : e.value
                })
            });
            var Ct = /^(?:focusinfocus|focusoutblur)$/;
            de.extend(de.event, {
                trigger: function (t, n, r, o) {
                    var i, a, s, u, l, c, f, p = [r || te], h = le.call(t, "type") ? t.type : t,
                        d = le.call(t, "namespace") ? t.namespace.split(".") : [];
                    if (a = s = r = r || te, 3 !== r.nodeType && 8 !== r.nodeType && !Ct.test(h + de.event.triggered) && (h.indexOf(".") > -1 && (d = h.split("."), h = d.shift(), d.sort()), l = h.indexOf(":") < 0 && "on" + h, t = t[de.expando] ? t : new de.Event(h, "object" == typeof t && t), t.isTrigger = o ? 2 : 3, t.namespace = d.join("."), t.rnamespace = t.namespace ? new RegExp("(^|\\.)" + d.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, t.result = void 0, t.target || (t.target = r), n = null == n ? [t] : de.makeArray(n, [t]), f = de.event.special[h] || {}, o || !f.trigger || f.trigger.apply(r, n) !== !1)) {
                        if (!o && !f.noBubble && !de.isWindow(r)) {
                            for (u = f.delegateType || h, Ct.test(u + h) || (a = a.parentNode); a; a = a.parentNode)p.push(a), s = a;
                            s === (r.ownerDocument || te) && p.push(s.defaultView || s.parentWindow || e)
                        }
                        for (i = 0; (a = p[i++]) && !t.isPropagationStopped();)t.type = i > 1 ? u : f.bindType || h, c = (Fe.get(a, "events") || {})[t.type] && Fe.get(a, "handle"), c && c.apply(a, n), c = l && a[l], c && c.apply && He(a) && (t.result = c.apply(a, n), t.result === !1 && t.preventDefault());
                        return t.type = h, o || t.isDefaultPrevented() || f._default && f._default.apply(p.pop(), n) !== !1 || !He(r) || l && de.isFunction(r[h]) && !de.isWindow(r) && (s = r[l], s && (r[l] = null), de.event.triggered = h, r[h](), de.event.triggered = void 0, s && (r[l] = s)), t.result
                    }
                }, simulate: function (e, t, n) {
                    var r = de.extend(new de.Event, n, {type: e, isSimulated: !0});
                    de.event.trigger(r, null, t)
                }
            }), de.fn.extend({
                trigger: function (e, t) {
                    return this.each(function () {
                        de.event.trigger(e, t, this)
                    })
                }, triggerHandler: function (e, t) {
                    var n = this[0];
                    if (n)return de.event.trigger(e, t, n, !0)
                }
            }), de.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "), function (e, t) {
                de.fn[t] = function (e, n) {
                    return arguments.length > 0 ? this.on(t, null, e, n) : this.trigger(t)
                }
            }), de.fn.extend({
                hover: function (e, t) {
                    return this.mouseenter(e).mouseleave(t || e)
                }
            }), pe.focusin = "onfocusin" in e, pe.focusin || de.each({
                focus: "focusin",
                blur: "focusout"
            }, function (e, t) {
                var n = function (e) {
                    de.event.simulate(t, e.target, de.event.fix(e))
                };
                de.event.special[t] = {
                    setup: function () {
                        var r = this.ownerDocument || this, o = Fe.access(r, t);
                        o || r.addEventListener(e, n, !0), Fe.access(r, t, (o || 0) + 1)
                    }, teardown: function () {
                        var r = this.ownerDocument || this, o = Fe.access(r, t) - 1;
                        o ? Fe.access(r, t, o) : (r.removeEventListener(e, n, !0), Fe.remove(r, t))
                    }
                }
            });
            var Tt = e.location, kt = de.now(), jt = /\?/;
            de.parseXML = function (t) {
                var n;
                if (!t || "string" != typeof t)return null;
                try {
                    n = (new e.DOMParser).parseFromString(t, "text/xml")
                } catch (e) {
                    n = void 0
                }
                return n && !n.getElementsByTagName("parsererror").length || de.error("Invalid XML: " + t), n
            };
            var Et = /\[\]$/, Nt = /\r?\n/g, St = /^(?:submit|button|image|reset|file)$/i,
                At = /^(?:input|select|textarea|keygen)/i;
            de.param = function (e, t) {
                var n, r = [], o = function (e, t) {
                    var n = de.isFunction(t) ? t() : t;
                    r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(null == n ? "" : n)
                };
                if (de.isArray(e) || e.jquery && !de.isPlainObject(e)) de.each(e, function () {
                    o(this.name, this.value)
                }); else for (n in e)K(n, e[n], t, o);
                return r.join("&")
            }, de.fn.extend({
                serialize: function () {
                    return de.param(this.serializeArray())
                }, serializeArray: function () {
                    return this.map(function () {
                        var e = de.prop(this, "elements");
                        return e ? de.makeArray(e) : this
                    }).filter(function () {
                        var e = this.type;
                        return this.name && !de(this).is(":disabled") && At.test(this.nodeName) && !St.test(e) && (this.checked || !ze.test(e))
                    }).map(function (e, t) {
                        var n = de(this).val();
                        return null == n ? null : de.isArray(n) ? de.map(n, function (e) {
                            return {name: t.name, value: e.replace(Nt, "\r\n")}
                        }) : {name: t.name, value: n.replace(Nt, "\r\n")}
                    }).get()
                }
            });
            var qt = /%20/g, Dt = /#.*$/, Ot = /([?&])_=[^&]*/, Lt = /^(.*?):[ \t]*([^\r\n]*)$/gm,
                Ht = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, Ft = /^(?:GET|HEAD)$/, Pt = /^\/\//,
                It = {}, Rt = {}, Mt = "*/".concat("*"), $t = te.createElement("a");
            $t.href = Tt.href, de.extend({
                active: 0,
                lastModified: {},
                etag: {},
                ajaxSettings: {
                    url: Tt.href,
                    type: "GET",
                    isLocal: Ht.test(Tt.protocol),
                    global: !0,
                    processData: !0,
                    async: !0,
                    contentType: "application/x-www-form-urlencoded; charset=UTF-8",
                    accepts: {
                        "*": Mt,
                        text: "text/plain",
                        html: "text/html",
                        xml: "application/xml, text/xml",
                        json: "application/json, text/javascript"
                    },
                    contents: {xml: /\bxml\b/, html: /\bhtml/, json: /\bjson\b/},
                    responseFields: {xml: "responseXML", text: "responseText", json: "responseJSON"},
                    converters: {"* text": String, "text html": !0, "text json": JSON.parse, "text xml": de.parseXML},
                    flatOptions: {url: !0, context: !0}
                },
                ajaxSetup: function (e, t) {
                    return t ? Y(Y(e, de.ajaxSettings), t) : Y(de.ajaxSettings, e)
                },
                ajaxPrefilter: V(It),
                ajaxTransport: V(Rt),
                ajax: function (t, n) {
                    function r(t, n, r, s) {
                        var l, p, h, x, w, C = n;
                        c || (c = !0, u && e.clearTimeout(u), o = void 0, a = s || "", T.readyState = t > 0 ? 4 : 0, l = t >= 200 && t < 300 || 304 === t, r && (x = Q(d, T, r)), x = J(d, x, T, l), l ? (d.ifModified && (w = T.getResponseHeader("Last-Modified"), w && (de.lastModified[i] = w), w = T.getResponseHeader("etag"), w && (de.etag[i] = w)), 204 === t || "HEAD" === d.type ? C = "nocontent" : 304 === t ? C = "notmodified" : (C = x.state, p = x.data, h = x.error, l = !h)) : (h = C, !t && C || (C = "error", t < 0 && (t = 0))), T.status = t, T.statusText = (n || C) + "", l ? v.resolveWith(g, [p, C, T]) : v.rejectWith(g, [T, C, h]), T.statusCode(b), b = void 0, f && m.trigger(l ? "ajaxSuccess" : "ajaxError", [T, d, l ? p : h]), y.fireWith(g, [T, C]), f && (m.trigger("ajaxComplete", [T, d]), --de.active || de.event.trigger("ajaxStop")))
                    }

                    "object" == typeof t && (n = t, t = void 0), n = n || {};
                    var o, i, a, s, u, l, c, f, p, h, d = de.ajaxSetup({}, n), g = d.context || d,
                        m = d.context && (g.nodeType || g.jquery) ? de(g) : de.event, v = de.Deferred(),
                        y = de.Callbacks("once memory"), b = d.statusCode || {}, x = {}, w = {}, C = "canceled", T = {
                            readyState: 0, getResponseHeader: function (e) {
                                var t;
                                if (c) {
                                    if (!s)for (s = {}; t = Lt.exec(a);)s[t[1].toLowerCase()] = t[2];
                                    t = s[e.toLowerCase()]
                                }
                                return null == t ? null : t
                            }, getAllResponseHeaders: function () {
                                return c ? a : null
                            }, setRequestHeader: function (e, t) {
                                return null == c && (e = w[e.toLowerCase()] = w[e.toLowerCase()] || e, x[e] = t), this
                            }, overrideMimeType: function (e) {
                                return null == c && (d.mimeType = e), this
                            }, statusCode: function (e) {
                                var t;
                                if (e)if (c) T.always(e[T.status]); else for (t in e)b[t] = [b[t], e[t]];
                                return this
                            }, abort: function (e) {
                                var t = e || C;
                                return o && o.abort(t), r(0, t), this
                            }
                        };
                    if (v.promise(T), d.url = ((t || d.url || Tt.href) + "").replace(Pt, Tt.protocol + "//"), d.type = n.method || n.type || d.method || d.type, d.dataTypes = (d.dataType || "*").toLowerCase().match(qe) || [""], null == d.crossDomain) {
                        l = te.createElement("a");
                        try {
                            l.href = d.url, l.href = l.href, d.crossDomain = $t.protocol + "//" + $t.host != l.protocol + "//" + l.host
                        } catch (e) {
                            d.crossDomain = !0
                        }
                    }
                    if (d.data && d.processData && "string" != typeof d.data && (d.data = de.param(d.data, d.traditional)), G(It, d, n, T), c)return T;
                    f = de.event && d.global, f && 0 === de.active++ && de.event.trigger("ajaxStart"), d.type = d.type.toUpperCase(), d.hasContent = !Ft.test(d.type), i = d.url.replace(Dt, ""), d.hasContent ? d.data && d.processData && 0 === (d.contentType || "").indexOf("application/x-www-form-urlencoded") && (d.data = d.data.replace(qt, "+")) : (h = d.url.slice(i.length), d.data && (i += (jt.test(i) ? "&" : "?") + d.data, delete d.data), d.cache === !1 && (i = i.replace(Ot, "$1"), h = (jt.test(i) ? "&" : "?") + "_=" + kt++ + h), d.url = i + h), d.ifModified && (de.lastModified[i] && T.setRequestHeader("If-Modified-Since", de.lastModified[i]), de.etag[i] && T.setRequestHeader("If-None-Match", de.etag[i])), (d.data && d.hasContent && d.contentType !== !1 || n.contentType) && T.setRequestHeader("Content-Type", d.contentType), T.setRequestHeader("Accept", d.dataTypes[0] && d.accepts[d.dataTypes[0]] ? d.accepts[d.dataTypes[0]] + ("*" !== d.dataTypes[0] ? ", " + Mt + "; q=0.01" : "") : d.accepts["*"]);
                    for (p in d.headers)T.setRequestHeader(p, d.headers[p]);
                    if (d.beforeSend && (d.beforeSend.call(g, T, d) === !1 || c))return T.abort();
                    if (C = "abort", y.add(d.complete), T.done(d.success), T.fail(d.error), o = G(Rt, d, n, T)) {
                        if (T.readyState = 1, f && m.trigger("ajaxSend", [T, d]), c)return T;
                        d.async && d.timeout > 0 && (u = e.setTimeout(function () {
                            T.abort("timeout")
                        }, d.timeout));
                        try {
                            c = !1, o.send(x, r)
                        } catch (e) {
                            if (c)throw e;
                            r(-1, e)
                        }
                    } else r(-1, "No Transport");
                    return T
                },
                getJSON: function (e, t, n) {
                    return de.get(e, t, n, "json")
                },
                getScript: function (e, t) {
                    return de.get(e, void 0, t, "script")
                }
            }), de.each(["get", "post"], function (e, t) {
                de[t] = function (e, n, r, o) {
                    return de.isFunction(n) && (o = o || r, r = n, n = void 0), de.ajax(de.extend({
                        url: e,
                        type: t,
                        dataType: o,
                        data: n,
                        success: r
                    }, de.isPlainObject(e) && e))
                }
            }), de._evalUrl = function (e) {
                return de.ajax({url: e, type: "GET", dataType: "script", cache: !0, async: !1, global: !1, throws: !0})
            }, de.fn.extend({
                wrapAll: function (e) {
                    var t;
                    return this[0] && (de.isFunction(e) && (e = e.call(this[0])), t = de(e, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && t.insertBefore(this[0]), t.map(function () {
                        for (var e = this; e.firstElementChild;)e = e.firstElementChild;
                        return e
                    }).append(this)), this
                }, wrapInner: function (e) {
                    return de.isFunction(e) ? this.each(function (t) {
                        de(this).wrapInner(e.call(this, t))
                    }) : this.each(function () {
                        var t = de(this), n = t.contents();
                        n.length ? n.wrapAll(e) : t.append(e)
                    })
                }, wrap: function (e) {
                    var t = de.isFunction(e);
                    return this.each(function (n) {
                        de(this).wrapAll(t ? e.call(this, n) : e)
                    })
                }, unwrap: function (e) {
                    return this.parent(e).not("body").each(function () {
                        de(this).replaceWith(this.childNodes)
                    }), this
                }
            }), de.expr.pseudos.hidden = function (e) {
                return !de.expr.pseudos.visible(e)
            }, de.expr.pseudos.visible = function (e) {
                return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length)
            }, de.ajaxSettings.xhr = function () {
                try {
                    return new e.XMLHttpRequest
                } catch (e) {
                }
            };
            var _t = {0: 200, 1223: 204}, Wt = de.ajaxSettings.xhr();
            pe.cors = !!Wt && "withCredentials" in Wt, pe.ajax = Wt = !!Wt, de.ajaxTransport(function (t) {
                var n, r;
                if (pe.cors || Wt && !t.crossDomain)return {
                    send: function (o, i) {
                        var a, s = t.xhr();
                        if (s.open(t.type, t.url, t.async, t.username, t.password), t.xhrFields)for (a in t.xhrFields)s[a] = t.xhrFields[a];
                        t.mimeType && s.overrideMimeType && s.overrideMimeType(t.mimeType), t.crossDomain || o["X-Requested-With"] || (o["X-Requested-With"] = "XMLHttpRequest");
                        for (a in o)s.setRequestHeader(a, o[a]);
                        n = function (e) {
                            return function () {
                                n && (n = r = s.onload = s.onerror = s.onabort = s.onreadystatechange = null, "abort" === e ? s.abort() : "error" === e ? "number" != typeof s.status ? i(0, "error") : i(s.status, s.statusText) : i(_t[s.status] || s.status, s.statusText, "text" !== (s.responseType || "text") || "string" != typeof s.responseText ? {binary: s.response} : {text: s.responseText}, s.getAllResponseHeaders()))
                            }
                        }, s.onload = n(), r = s.onerror = n("error"), void 0 !== s.onabort ? s.onabort = r : s.onreadystatechange = function () {
                            4 === s.readyState && e.setTimeout(function () {
                                n && r()
                            })
                        }, n = n("abort");
                        try {
                            s.send(t.hasContent && t.data || null)
                        } catch (e) {
                            if (n)throw e
                        }
                    }, abort: function () {
                        n && n()
                    }
                }
            }), de.ajaxPrefilter(function (e) {
                e.crossDomain && (e.contents.script = !1)
            }), de.ajaxSetup({
                accepts: {script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},
                contents: {script: /\b(?:java|ecma)script\b/},
                converters: {
                    "text script": function (e) {
                        return de.globalEval(e), e
                    }
                }
            }), de.ajaxPrefilter("script", function (e) {
                void 0 === e.cache && (e.cache = !1), e.crossDomain && (e.type = "GET")
            }), de.ajaxTransport("script", function (e) {
                if (e.crossDomain) {
                    var t, n;
                    return {
                        send: function (r, o) {
                            t = de("<script>").prop({
                                charset: e.scriptCharset,
                                src: e.url
                            }).on("load error", n = function (e) {
                                t.remove(), n = null, e && o("error" === e.type ? 404 : 200, e.type)
                            }), te.head.appendChild(t[0])
                        }, abort: function () {
                            n && n()
                        }
                    }
                }
            });
            var Bt = [], Ut = /(=)\?(?=&|$)|\?\?/;
            de.ajaxSetup({
                jsonp: "callback", jsonpCallback: function () {
                    var e = Bt.pop() || de.expando + "_" + kt++;
                    return this[e] = !0, e
                }
            }), de.ajaxPrefilter("json jsonp", function (t, n, r) {
                var o, i, a,
                    s = t.jsonp !== !1 && (Ut.test(t.url) ? "url" : "string" == typeof t.data && 0 === (t.contentType || "").indexOf("application/x-www-form-urlencoded") && Ut.test(t.data) && "data");
                if (s || "jsonp" === t.dataTypes[0])return o = t.jsonpCallback = de.isFunction(t.jsonpCallback) ? t.jsonpCallback() : t.jsonpCallback, s ? t[s] = t[s].replace(Ut, "$1" + o) : t.jsonp !== !1 && (t.url += (jt.test(t.url) ? "&" : "?") + t.jsonp + "=" + o), t.converters["script json"] = function () {
                    return a || de.error(o + " was not called"), a[0]
                }, t.dataTypes[0] = "json", i = e[o], e[o] = function () {
                    a = arguments
                }, r.always(function () {
                    void 0 === i ? de(e).removeProp(o) : e[o] = i, t[o] && (t.jsonpCallback = n.jsonpCallback, Bt.push(o)), a && de.isFunction(i) && i(a[0]), a = i = void 0
                }), "script"
            }), pe.createHTMLDocument = function () {
                var e = te.implementation.createHTMLDocument("").body;
                return e.innerHTML = "<form></form><form></form>", 2 === e.childNodes.length
            }(), de.parseHTML = function (e, t, n) {
                if ("string" != typeof e)return [];
                "boolean" == typeof t && (n = t, t = !1);
                var r, o, i;
                return t || (pe.createHTMLDocument ? (t = te.implementation.createHTMLDocument(""), r = t.createElement("base"), r.href = te.location.href, t.head.appendChild(r)) : t = te), o = Te.exec(e), i = !n && [], o ? [t.createElement(o[1])] : (o = b([e], t, i), i && i.length && de(i).remove(), de.merge([], o.childNodes))
            }, de.fn.load = function (e, t, n) {
                var r, o, i, a = this, s = e.indexOf(" ");
                return s > -1 && (r = z(e.slice(s)), e = e.slice(0, s)), de.isFunction(t) ? (n = t, t = void 0) : t && "object" == typeof t && (o = "POST"), a.length > 0 && de.ajax({
                    url: e,
                    type: o || "GET",
                    dataType: "html",
                    data: t
                }).done(function (e) {
                    i = arguments, a.html(r ? de("<div>").append(de.parseHTML(e)).find(r) : e)
                }).always(n && function (e, t) {
                        a.each(function () {
                            n.apply(this, i || [e.responseText, t, e])
                        })
                    }), this
            }, de.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (e, t) {
                de.fn[t] = function (e) {
                    return this.on(t, e)
                }
            }), de.expr.pseudos.animated = function (e) {
                return de.grep(de.timers, function (t) {
                    return e === t.elem
                }).length
            }, de.offset = {
                setOffset: function (e, t, n) {
                    var r, o, i, a, s, u, l, c = de.css(e, "position"), f = de(e), p = {};
                    "static" === c && (e.style.position = "relative"), s = f.offset(), i = de.css(e, "top"), u = de.css(e, "left"), l = ("absolute" === c || "fixed" === c) && (i + u).indexOf("auto") > -1, l ? (r = f.position(), a = r.top, o = r.left) : (a = parseFloat(i) || 0, o = parseFloat(u) || 0), de.isFunction(t) && (t = t.call(e, n, de.extend({}, s))), null != t.top && (p.top = t.top - s.top + a), null != t.left && (p.left = t.left - s.left + o), "using" in t ? t.using.call(e, p) : f.css(p)
                }
            }, de.fn.extend({
                offset: function (e) {
                    if (arguments.length)return void 0 === e ? this : this.each(function (t) {
                        de.offset.setOffset(this, e, t)
                    });
                    var t, n, r, o, i = this[0];
                    if (i)return i.getClientRects().length ? (r = i.getBoundingClientRect(), r.width || r.height ? (o = i.ownerDocument, n = Z(o), t = o.documentElement, {
                        top: r.top + n.pageYOffset - t.clientTop,
                        left: r.left + n.pageXOffset - t.clientLeft
                    }) : r) : {top: 0, left: 0}
                }, position: function () {
                    if (this[0]) {
                        var e, t, n = this[0], r = {top: 0, left: 0};
                        return "fixed" === de.css(n, "position") ? t = n.getBoundingClientRect() : (e = this.offsetParent(), t = this.offset(), de.nodeName(e[0], "html") || (r = e.offset()), r = {
                            top: r.top + de.css(e[0], "borderTopWidth", !0),
                            left: r.left + de.css(e[0], "borderLeftWidth", !0)
                        }), {
                            top: t.top - r.top - de.css(n, "marginTop", !0),
                            left: t.left - r.left - de.css(n, "marginLeft", !0)
                        }
                    }
                }, offsetParent: function () {
                    return this.map(function () {
                        for (var e = this.offsetParent; e && "static" === de.css(e, "position");)e = e.offsetParent;
                        return e || Ye
                    })
                }
            }), de.each({scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function (e, t) {
                var n = "pageYOffset" === t;
                de.fn[e] = function (r) {
                    return Le(this, function (e, r, o) {
                        var i = Z(e);
                        return void 0 === o ? i ? i[t] : e[r] : void(i ? i.scrollTo(n ? i.pageXOffset : o, n ? o : i.pageYOffset) : e[r] = o)
                    }, e, r, arguments.length)
                }
            }), de.each(["top", "left"], function (e, t) {
                de.cssHooks[t] = O(pe.pixelPosition, function (e, n) {
                    if (n)return n = D(e, t), at.test(n) ? de(e).position()[t] + "px" : n
                })
            }), de.each({Height: "height", Width: "width"}, function (e, t) {
                de.each({padding: "inner" + e, content: t, "": "outer" + e}, function (n, r) {
                    de.fn[r] = function (o, i) {
                        var a = arguments.length && (n || "boolean" != typeof o),
                            s = n || (o === !0 || i === !0 ? "margin" : "border");
                        return Le(this, function (t, n, o) {
                            var i;
                            return de.isWindow(t) ? 0 === r.indexOf("outer") ? t["inner" + e] : t.document.documentElement["client" + e] : 9 === t.nodeType ? (i = t.documentElement, Math.max(t.body["scroll" + e], i["scroll" + e], t.body["offset" + e], i["offset" + e], i["client" + e])) : void 0 === o ? de.css(t, n, s) : de.style(t, n, o, s)
                        }, t, a ? o : void 0, a)
                    }
                })
            }), de.fn.extend({
                bind: function (e, t, n) {
                    return this.on(e, null, t, n)
                }, unbind: function (e, t) {
                    return this.off(e, null, t)
                }, delegate: function (e, t, n, r) {
                    return this.on(t, e, n, r)
                }, undelegate: function (e, t, n) {
                    return 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", n)
                }
            }), de.parseJSON = JSON.parse, "function" == typeof define && define.amd && define("jquery", [], function () {
                return de
            });
            var zt = e.jQuery, Xt = e.$;
            return de.noConflict = function (t) {
                return e.$ === de && (e.$ = Xt), t && e.jQuery === de && (e.jQuery = zt), de
            }, t || (e.jQuery = e.$ = de), de
        })
    }, {}],
    2: [function (e, t, n) {
        !function (e, n, r) {
            function o(e, t, n) {
                return e.addEventListener ? void e.addEventListener(t, n, !1) : void e.attachEvent("on" + t, n)
            }

            function i(e) {
                if ("keypress" == e.type) {
                    var t = String.fromCharCode(e.which);
                    return e.shiftKey || (t = t.toLowerCase()), t
                }
                return y[e.which] ? y[e.which] : b[e.which] ? b[e.which] : String.fromCharCode(e.which).toLowerCase()
            }

            function a(e, t) {
                return e.sort().join(",") === t.sort().join(",")
            }

            function s(e) {
                var t = [];
                return e.shiftKey && t.push("shift"), e.altKey && t.push("alt"), e.ctrlKey && t.push("ctrl"), e.metaKey && t.push("meta"), t
            }

            function u(e) {
                return e.preventDefault ? void e.preventDefault() : void(e.returnValue = !1)
            }

            function l(e) {
                return e.stopPropagation ? void e.stopPropagation() : void(e.cancelBubble = !0)
            }

            function c(e) {
                return "shift" == e || "ctrl" == e || "alt" == e || "meta" == e
            }

            function f() {
                if (!v) {
                    v = {};
                    for (var e in y)e > 95 && e < 112 || y.hasOwnProperty(e) && (v[y[e]] = e)
                }
                return v
            }

            function p(e, t, n) {
                return n || (n = f()[e] ? "keydown" : "keypress"), "keypress" == n && t.length && (n = "keydown"), n
            }

            function h(e) {
                return "+" === e ? ["+"] : (e = e.replace(/\+{2}/g, "+plus"), e.split("+"))
            }

            function d(e, t) {
                var n, r, o, i = [];
                for (n = h(e), o = 0; o < n.length; ++o)r = n[o], w[r] && (r = w[r]), t && "keypress" != t && x[r] && (r = x[r], i.push("shift")), c(r) && i.push(r);
                return t = p(r, i, t), {key: r, modifiers: i, action: t}
            }

            function g(e, t) {
                return null !== e && e !== n && (e === t || g(e.parentNode, t))
            }

            function m(e) {
                function t(e) {
                    e = e || {};
                    var t, n = !1;
                    for (t in x)e[t] ? n = !0 : x[t] = 0;
                    n || (T = !1)
                }

                function r(e, t, n, r, o, i) {
                    var s, u, l = [], f = n.type;
                    if (!y._callbacks[e])return [];
                    for ("keyup" == f && c(e) && (t = [e]), s = 0; s < y._callbacks[e].length; ++s)if (u = y._callbacks[e][s], (r || !u.seq || x[u.seq] == u.level) && f == u.action && ("keypress" == f && !n.metaKey && !n.ctrlKey || a(t, u.modifiers))) {
                        var p = !r && u.combo == o, h = r && u.seq == r && u.level == i;
                        (p || h) && y._callbacks[e].splice(s, 1), l.push(u)
                    }
                    return l
                }

                function f(e, t, n, r) {
                    y.stopCallback(t, t.target || t.srcElement, n, r) || e(t, n) === !1 && (u(t), l(t))
                }

                function p(e) {
                    "number" != typeof e.which && (e.which = e.keyCode);
                    var t = i(e);
                    if (t)return "keyup" == e.type && w === t ? void(w = !1) : void y.handleKey(t, s(e), e)
                }

                function h() {
                    clearTimeout(b), b = setTimeout(t, 1e3)
                }

                function g(e, n, r, o) {
                    function a(t) {
                        return function () {
                            T = t, ++x[e], h()
                        }
                    }

                    function s(n) {
                        f(r, n, e), "keyup" !== o && (w = i(n)), setTimeout(t, 10)
                    }

                    x[e] = 0;
                    for (var u = 0; u < n.length; ++u) {
                        var l = u + 1 === n.length, c = l ? s : a(o || d(n[u + 1]).action);
                        v(n[u], c, o, e, u)
                    }
                }

                function v(e, t, n, o, i) {
                    y._directMap[e + ":" + n] = t, e = e.replace(/\s+/g, " ");
                    var a, s = e.split(" ");
                    return s.length > 1 ? void g(e, s, t, n) : (a = d(e, n), y._callbacks[a.key] = y._callbacks[a.key] || [], r(a.key, a.modifiers, {type: a.action}, o, e, i), void y._callbacks[a.key][o ? "unshift" : "push"]({
                        callback: t,
                        modifiers: a.modifiers,
                        action: a.action,
                        seq: o,
                        level: i,
                        combo: e
                    }))
                }

                var y = this;
                if (e = e || n, !(y instanceof m))return new m(e);
                y.target = e, y._callbacks = {}, y._directMap = {};
                var b, x = {}, w = !1, C = !1, T = !1;
                y._handleKey = function (e, n, o) {
                    var i, a = r(e, n, o), s = {}, u = 0, l = !1;
                    for (i = 0; i < a.length; ++i)a[i].seq && (u = Math.max(u, a[i].level));
                    for (i = 0; i < a.length; ++i)if (a[i].seq) {
                        if (a[i].level != u)continue;
                        l = !0, s[a[i].seq] = 1, f(a[i].callback, o, a[i].combo, a[i].seq)
                    } else l || f(a[i].callback, o, a[i].combo);
                    var p = "keypress" == o.type && C;
                    o.type != T || c(e) || p || t(s), C = l && "keydown" == o.type
                }, y._bindMultiple = function (e, t, n) {
                    for (var r = 0; r < e.length; ++r)v(e[r], t, n)
                }, o(e, "keypress", p), o(e, "keydown", p), o(e, "keyup", p)
            }

            if (e) {
                for (var v, y = {
                    8: "backspace",
                    9: "tab",
                    13: "enter",
                    16: "shift",
                    17: "ctrl",
                    18: "alt",
                    20: "capslock",
                    27: "esc",
                    32: "space",
                    33: "pageup",
                    34: "pagedown",
                    35: "end",
                    36: "home",
                    37: "left",
                    38: "up",
                    39: "right",
                    40: "down",
                    45: "ins",
                    46: "del",
                    91: "meta",
                    93: "meta",
                    224: "meta"
                }, b = {
                    106: "*",
                    107: "+",
                    109: "-",
                    110: ".",
                    111: "/",
                    186: ";",
                    187: "=",
                    188: ",",
                    189: "-",
                    190: ".",
                    191: "/",
                    192: "`",
                    219: "[",
                    220: "\\",
                    221: "]",
                    222: "'"
                }, x = {
                    "~": "`",
                    "!": "1",
                    "@": "2",
                    "#": "3",
                    $: "4",
                    "%": "5",
                    "^": "6",
                    "&": "7",
                    "*": "8",
                    "(": "9",
                    ")": "0",
                    _: "-",
                    "+": "=",
                    ":": ";",
                    '"': "'",
                    "<": ",",
                    ">": ".",
                    "?": "/",
                    "|": "\\"
                }, w = {
                    option: "alt",
                    command: "meta",
                    return: "enter",
                    escape: "esc",
                    plus: "+",
                    mod: /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? "meta" : "ctrl"
                }, C = 1; C < 20; ++C)y[111 + C] = "f" + C;
                for (C = 0; C <= 9; ++C)y[C + 96] = C;
                m.prototype.bind = function (e, t, n) {
                    var r = this;
                    return e = e instanceof Array ? e : [e], r._bindMultiple.call(r, e, t, n), r
                }, m.prototype.unbind = function (e, t) {
                    var n = this;
                    return n.bind.call(n, e, function () {
                    }, t)
                }, m.prototype.trigger = function (e, t) {
                    var n = this;
                    return n._directMap[e + ":" + t] && n._directMap[e + ":" + t]({}, e), n
                }, m.prototype.reset = function () {
                    var e = this;
                    return e._callbacks = {}, e._directMap = {}, e
                }, m.prototype.stopCallback = function (e, t) {
                    var n = this;
                    return !((" " + t.className + " ").indexOf(" mousetrap ") > -1) && (!g(t, n.target) && ("INPUT" == t.tagName || "SELECT" == t.tagName || "TEXTAREA" == t.tagName || t.isContentEditable))
                }, m.prototype.handleKey = function () {
                    var e = this;
                    return e._handleKey.apply(e, arguments)
                }, m.addKeycodes = function (e) {
                    for (var t in e)e.hasOwnProperty(t) && (y[t] = e[t]);
                    v = null
                }, m.init = function () {
                    var e = m(n);
                    for (var t in e)"_" !== t.charAt(0) && (m[t] = function (t) {
                        return function () {
                            return e[t].apply(e, arguments)
                        }
                    }(t))
                }, m.init(), e.Mousetrap = m, "undefined" != typeof t && t.exports && (t.exports = m), "function" == typeof define && define.amd && define(function () {
                    return m
                })
            }
        }("undefined" != typeof window ? window : null, "undefined" != typeof window ? document : null)
    }, {}],
    3: [function (e, t, n) {
        (function (e) {
            !function (r) {
                function o(e) {
                    throw new RangeError(L[e])
                }

                function i(e, t) {
                    for (var n = e.length, r = []; n--;)r[n] = t(e[n]);
                    return r
                }

                function a(e, t) {
                    var n = e.split("@"), r = "";
                    n.length > 1 && (r = n[0] + "@", e = n[1]), e = e.replace(O, ".");
                    var o = e.split("."), a = i(o, t).join(".");
                    return r + a
                }

                function s(e) {
                    for (var t, n, r = [], o = 0, i = e.length; o < i;)t = e.charCodeAt(o++), t >= 55296 && t <= 56319 && o < i ? (n = e.charCodeAt(o++), 56320 == (64512 & n) ? r.push(((1023 & t) << 10) + (1023 & n) + 65536) : (r.push(t), o--)) : r.push(t);
                    return r
                }

                function u(e) {
                    return i(e, function (e) {
                        var t = "";
                        return e > 65535 && (e -= 65536, t += P(e >>> 10 & 1023 | 55296), e = 56320 | 1023 & e), t += P(e)
                    }).join("")
                }

                function l(e) {
                    return e - 48 < 10 ? e - 22 : e - 65 < 26 ? e - 65 : e - 97 < 26 ? e - 97 : C
                }

                function c(e, t) {
                    return e + 22 + 75 * (e < 26) - ((0 != t) << 5)
                }

                function f(e, t, n) {
                    var r = 0;
                    for (e = n ? F(e / E) : e >> 1, e += F(e / t); e > H * k >> 1; r += C)e = F(e / H);
                    return F(r + (H + 1) * e / (e + j))
                }

                function p(e) {
                    var t, n, r, i, a, s, c, p, h, d, g = [], m = e.length, v = 0, y = S, b = N;
                    for (n = e.lastIndexOf(A), n < 0 && (n = 0), r = 0; r < n; ++r)e.charCodeAt(r) >= 128 && o("not-basic"), g.push(e.charCodeAt(r));
                    for (i = n > 0 ? n + 1 : 0; i < m;) {
                        for (a = v, s = 1, c = C; i >= m && o("invalid-input"), p = l(e.charCodeAt(i++)), (p >= C || p > F((w - v) / s)) && o("overflow"), v += p * s, h = c <= b ? T : c >= b + k ? k : c - b, !(p < h); c += C)d = C - h, s > F(w / d) && o("overflow"), s *= d;
                        t = g.length + 1, b = f(v - a, t, 0 == a), F(v / t) > w - y && o("overflow"), y += F(v / t), v %= t, g.splice(v++, 0, y)
                    }
                    return u(g)
                }

                function h(e) {
                    var t, n, r, i, a, u, l, p, h, d, g, m, v, y, b, x = [];
                    for (e = s(e), m = e.length, t = S, n = 0, a = N, u = 0; u < m; ++u)g = e[u], g < 128 && x.push(P(g));
                    for (r = i = x.length, i && x.push(A); r < m;) {
                        for (l = w, u = 0; u < m; ++u)g = e[u], g >= t && g < l && (l = g);
                        for (v = r + 1, l - t > F((w - n) / v) && o("overflow"), n += (l - t) * v, t = l, u = 0; u < m; ++u)if (g = e[u], g < t && ++n > w && o("overflow"), g == t) {
                            for (p = n, h = C; d = h <= a ? T : h >= a + k ? k : h - a, !(p < d); h += C)b = p - d, y = C - d, x.push(P(c(d + b % y, 0))), p = F(b / y);
                            x.push(P(c(p, 0))), a = f(n, v, r == i), n = 0, ++r
                        }
                        ++n, ++t
                    }
                    return x.join("")
                }

                function d(e) {
                    return a(e, function (e) {
                        return q.test(e) ? p(e.slice(4).toLowerCase()) : e
                    })
                }

                function g(e) {
                    return a(e, function (e) {
                        return D.test(e) ? "xn--" + h(e) : e
                    })
                }

                var m = "object" == typeof n && n && !n.nodeType && n,
                    v = "object" == typeof t && t && !t.nodeType && t, y = "object" == typeof e && e;
                y.global !== y && y.window !== y && y.self !== y || (r = y);
                var b, x, w = 2147483647, C = 36, T = 1, k = 26, j = 38, E = 700, N = 72, S = 128, A = "-", q = /^xn--/,
                    D = /[^\x20-\x7E]/, O = /[\x2E\u3002\uFF0E\uFF61]/g, L = {
                        overflow: "Overflow: input needs wider integers to process",
                        "not-basic": "Illegal input >= 0x80 (not a basic code point)",
                        "invalid-input": "Invalid input"
                    }, H = C - T, F = Math.floor, P = String.fromCharCode;
                if (b = {
                        version: "1.4.1",
                        ucs2: {decode: s, encode: u},
                        decode: p,
                        encode: h,
                        toASCII: g,
                        toUnicode: d
                    }, "function" == typeof define && "object" == typeof define.amd && define.amd) define("punycode", function () {
                    return b
                }); else if (m && v)if (t.exports == m) v.exports = b; else for (x in b)b.hasOwnProperty(x) && (m[x] = b[x]); else r.punycode = b
            }(this)
        }).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {})
    }, {}],
    4: [function (e, t, n) {
        "use strict";
        function r(e, t) {
            return Object.prototype.hasOwnProperty.call(e, t)
        }

        t.exports = function (e, t, n, i) {
            t = t || "&", n = n || "=";
            var a = {};
            if ("string" != typeof e || 0 === e.length)return a;
            var s = /\+/g;
            e = e.split(t);
            var u = 1e3;
            i && "number" == typeof i.maxKeys && (u = i.maxKeys);
            var l = e.length;
            u > 0 && l > u && (l = u);
            for (var c = 0; c < l; ++c) {
                var f, p, h, d, g = e[c].replace(s, "%20"), m = g.indexOf(n);
                m >= 0 ? (f = g.substr(0, m), p = g.substr(m + 1)) : (f = g, p = ""), h = decodeURIComponent(f), d = decodeURIComponent(p),
                    r(a, h) ? o(a[h]) ? a[h].push(d) : a[h] = [a[h], d] : a[h] = d
            }
            return a
        };
        var o = Array.isArray || function (e) {
                return "[object Array]" === Object.prototype.toString.call(e)
            }
    }, {}],
    5: [function (e, t, n) {
        "use strict";
        function r(e, t) {
            if (e.map)return e.map(t);
            for (var n = [], r = 0; r < e.length; r++)n.push(t(e[r], r));
            return n
        }

        var o = function (e) {
            switch (typeof e) {
                case"string":
                    return e;
                case"boolean":
                    return e ? "true" : "false";
                case"number":
                    return isFinite(e) ? e : "";
                default:
                    return ""
            }
        };
        t.exports = function (e, t, n, s) {
            return t = t || "&", n = n || "=", null === e && (e = void 0), "object" == typeof e ? r(a(e), function (a) {
                var s = encodeURIComponent(o(a)) + n;
                return i(e[a]) ? r(e[a], function (e) {
                    return s + encodeURIComponent(o(e))
                }).join(t) : s + encodeURIComponent(o(e[a]))
            }).join(t) : s ? encodeURIComponent(o(s)) + n + encodeURIComponent(o(e)) : ""
        };
        var i = Array.isArray || function (e) {
                return "[object Array]" === Object.prototype.toString.call(e)
            }, a = Object.keys || function (e) {
                var t = [];
                for (var n in e)Object.prototype.hasOwnProperty.call(e, n) && t.push(n);
                return t
            }
    }, {}],
    6: [function (e, t, n) {
        "use strict";
        n.decode = n.parse = e("./decode"), n.encode = n.stringify = e("./encode")
    }, {"./decode": 4, "./encode": 5}],
    7: [function (e, t, n) {
        "use strict";
        function r() {
            this.protocol = null, this.slashes = null, this.auth = null, this.host = null, this.port = null, this.hostname = null, this.hash = null, this.search = null, this.query = null, this.pathname = null, this.path = null, this.href = null
        }

        function o(e, t, n) {
            if (e && l.isObject(e) && e instanceof r)return e;
            var o = new r;
            return o.parse(e, t, n), o
        }

        function i(e) {
            return l.isString(e) && (e = o(e)), e instanceof r ? e.format() : r.prototype.format.call(e)
        }

        function a(e, t) {
            return o(e, !1, !0).resolve(t)
        }

        function s(e, t) {
            return e ? o(e, !1, !0).resolveObject(t) : t
        }

        var u = e("punycode"), l = e("./util");
        n.parse = o, n.resolve = a, n.resolveObject = s, n.format = i, n.Url = r;
        var c = /^([a-z0-9.+-]+:)/i, f = /:[0-9]*$/, p = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,
            h = ["<", ">", '"', "`", " ", "\r", "\n", "\t"], d = ["{", "}", "|", "\\", "^", "`"].concat(h),
            g = ["'"].concat(d), m = ["%", "/", "?", ";", "#"].concat(g), v = ["/", "?", "#"], y = 255,
            b = /^[+a-z0-9A-Z_-]{0,63}$/, x = /^([+a-z0-9A-Z_-]{0,63})(.*)$/, w = {javascript: !0, "javascript:": !0},
            C = {javascript: !0, "javascript:": !0}, T = {
                http: !0,
                https: !0,
                ftp: !0,
                gopher: !0,
                file: !0,
                "http:": !0,
                "https:": !0,
                "ftp:": !0,
                "gopher:": !0,
                "file:": !0
            }, k = e("querystring");
        r.prototype.parse = function (e, t, n) {
            if (!l.isString(e))throw new TypeError("Parameter 'url' must be a string, not " + typeof e);
            var r = e.indexOf("?"), o = r !== -1 && r < e.indexOf("#") ? "?" : "#", i = e.split(o), a = /\\/g;
            i[0] = i[0].replace(a, "/"), e = i.join(o);
            var s = e;
            if (s = s.trim(), !n && 1 === e.split("#").length) {
                var f = p.exec(s);
                if (f)return this.path = s, this.href = s, this.pathname = f[1], f[2] ? (this.search = f[2], t ? this.query = k.parse(this.search.substr(1)) : this.query = this.search.substr(1)) : t && (this.search = "", this.query = {}), this
            }
            var h = c.exec(s);
            if (h) {
                h = h[0];
                var d = h.toLowerCase();
                this.protocol = d, s = s.substr(h.length)
            }
            if (n || h || s.match(/^\/\/[^@\/]+@[^@\/]+/)) {
                var j = "//" === s.substr(0, 2);
                !j || h && C[h] || (s = s.substr(2), this.slashes = !0)
            }
            if (!C[h] && (j || h && !T[h])) {
                for (var E = -1, N = 0; N < v.length; N++) {
                    var S = s.indexOf(v[N]);
                    S !== -1 && (E === -1 || S < E) && (E = S)
                }
                var A, q;
                q = E === -1 ? s.lastIndexOf("@") : s.lastIndexOf("@", E), q !== -1 && (A = s.slice(0, q), s = s.slice(q + 1), this.auth = decodeURIComponent(A)), E = -1;
                for (var N = 0; N < m.length; N++) {
                    var S = s.indexOf(m[N]);
                    S !== -1 && (E === -1 || S < E) && (E = S)
                }
                E === -1 && (E = s.length), this.host = s.slice(0, E), s = s.slice(E), this.parseHost(), this.hostname = this.hostname || "";
                var D = "[" === this.hostname[0] && "]" === this.hostname[this.hostname.length - 1];
                if (!D)for (var O = this.hostname.split(/\./), N = 0, L = O.length; N < L; N++) {
                    var H = O[N];
                    if (H && !H.match(b)) {
                        for (var F = "", P = 0, I = H.length; P < I; P++)F += H.charCodeAt(P) > 127 ? "x" : H[P];
                        if (!F.match(b)) {
                            var R = O.slice(0, N), M = O.slice(N + 1), $ = H.match(x);
                            $ && (R.push($[1]), M.unshift($[2])), M.length && (s = "/" + M.join(".") + s), this.hostname = R.join(".");
                            break
                        }
                    }
                }
                this.hostname.length > y ? this.hostname = "" : this.hostname = this.hostname.toLowerCase(), D || (this.hostname = u.toASCII(this.hostname));
                var _ = this.port ? ":" + this.port : "", W = this.hostname || "";
                this.host = W + _, this.href += this.host, D && (this.hostname = this.hostname.substr(1, this.hostname.length - 2), "/" !== s[0] && (s = "/" + s))
            }
            if (!w[d])for (var N = 0, L = g.length; N < L; N++) {
                var B = g[N];
                if (s.indexOf(B) !== -1) {
                    var U = encodeURIComponent(B);
                    U === B && (U = escape(B)), s = s.split(B).join(U)
                }
            }
            var z = s.indexOf("#");
            z !== -1 && (this.hash = s.substr(z), s = s.slice(0, z));
            var X = s.indexOf("?");
            if (X !== -1 ? (this.search = s.substr(X), this.query = s.substr(X + 1), t && (this.query = k.parse(this.query)), s = s.slice(0, X)) : t && (this.search = "", this.query = {}), s && (this.pathname = s), T[d] && this.hostname && !this.pathname && (this.pathname = "/"), this.pathname || this.search) {
                var _ = this.pathname || "", K = this.search || "";
                this.path = _ + K
            }
            return this.href = this.format(), this
        }, r.prototype.format = function () {
            var e = this.auth || "";
            e && (e = encodeURIComponent(e), e = e.replace(/%3A/i, ":"), e += "@");
            var t = this.protocol || "", n = this.pathname || "", r = this.hash || "", o = !1, i = "";
            this.host ? o = e + this.host : this.hostname && (o = e + (this.hostname.indexOf(":") === -1 ? this.hostname : "[" + this.hostname + "]"), this.port && (o += ":" + this.port)), this.query && l.isObject(this.query) && Object.keys(this.query).length && (i = k.stringify(this.query));
            var a = this.search || i && "?" + i || "";
            return t && ":" !== t.substr(-1) && (t += ":"), this.slashes || (!t || T[t]) && o !== !1 ? (o = "//" + (o || ""), n && "/" !== n.charAt(0) && (n = "/" + n)) : o || (o = ""), r && "#" !== r.charAt(0) && (r = "#" + r), a && "?" !== a.charAt(0) && (a = "?" + a), n = n.replace(/[?#]/g, function (e) {
                return encodeURIComponent(e)
            }), a = a.replace("#", "%23"), t + o + n + a + r
        }, r.prototype.resolve = function (e) {
            return this.resolveObject(o(e, !1, !0)).format()
        }, r.prototype.resolveObject = function (e) {
            if (l.isString(e)) {
                var t = new r;
                t.parse(e, !1, !0), e = t
            }
            for (var n = new r, o = Object.keys(this), i = 0; i < o.length; i++) {
                var a = o[i];
                n[a] = this[a]
            }
            if (n.hash = e.hash, "" === e.href)return n.href = n.format(), n;
            if (e.slashes && !e.protocol) {
                for (var s = Object.keys(e), u = 0; u < s.length; u++) {
                    var c = s[u];
                    "protocol" !== c && (n[c] = e[c])
                }
                return T[n.protocol] && n.hostname && !n.pathname && (n.path = n.pathname = "/"), n.href = n.format(), n
            }
            if (e.protocol && e.protocol !== n.protocol) {
                if (!T[e.protocol]) {
                    for (var f = Object.keys(e), p = 0; p < f.length; p++) {
                        var h = f[p];
                        n[h] = e[h]
                    }
                    return n.href = n.format(), n
                }
                if (n.protocol = e.protocol, e.host || C[e.protocol]) n.pathname = e.pathname; else {
                    for (var d = (e.pathname || "").split("/"); d.length && !(e.host = d.shift()););
                    e.host || (e.host = ""), e.hostname || (e.hostname = ""), "" !== d[0] && d.unshift(""), d.length < 2 && d.unshift(""), n.pathname = d.join("/")
                }
                if (n.search = e.search, n.query = e.query, n.host = e.host || "", n.auth = e.auth, n.hostname = e.hostname || e.host, n.port = e.port, n.pathname || n.search) {
                    var g = n.pathname || "", m = n.search || "";
                    n.path = g + m
                }
                return n.slashes = n.slashes || e.slashes, n.href = n.format(), n
            }
            var v = n.pathname && "/" === n.pathname.charAt(0),
                y = e.host || e.pathname && "/" === e.pathname.charAt(0), b = y || v || n.host && e.pathname, x = b,
                w = n.pathname && n.pathname.split("/") || [], d = e.pathname && e.pathname.split("/") || [],
                k = n.protocol && !T[n.protocol];
            if (k && (n.hostname = "", n.port = null, n.host && ("" === w[0] ? w[0] = n.host : w.unshift(n.host)), n.host = "", e.protocol && (e.hostname = null, e.port = null, e.host && ("" === d[0] ? d[0] = e.host : d.unshift(e.host)), e.host = null), b = b && ("" === d[0] || "" === w[0])), y) n.host = e.host || "" === e.host ? e.host : n.host, n.hostname = e.hostname || "" === e.hostname ? e.hostname : n.hostname, n.search = e.search, n.query = e.query, w = d; else if (d.length) w || (w = []), w.pop(), w = w.concat(d), n.search = e.search, n.query = e.query; else if (!l.isNullOrUndefined(e.search)) {
                if (k) {
                    n.hostname = n.host = w.shift();
                    var j = !!(n.host && n.host.indexOf("@") > 0) && n.host.split("@");
                    j && (n.auth = j.shift(), n.host = n.hostname = j.shift())
                }
                return n.search = e.search, n.query = e.query, l.isNull(n.pathname) && l.isNull(n.search) || (n.path = (n.pathname ? n.pathname : "") + (n.search ? n.search : "")), n.href = n.format(), n
            }
            if (!w.length)return n.pathname = null, n.search ? n.path = "/" + n.search : n.path = null, n.href = n.format(), n;
            for (var E = w.slice(-1)[0], N = (n.host || e.host || w.length > 1) && ("." === E || ".." === E) || "" === E, S = 0, A = w.length; A >= 0; A--)E = w[A], "." === E ? w.splice(A, 1) : ".." === E ? (w.splice(A, 1), S++) : S && (w.splice(A, 1), S--);
            if (!b && !x)for (; S--; S)w.unshift("..");
            !b || "" === w[0] || w[0] && "/" === w[0].charAt(0) || w.unshift(""), N && "/" !== w.join("/").substr(-1) && w.push("");
            var q = "" === w[0] || w[0] && "/" === w[0].charAt(0);
            if (k) {
                n.hostname = n.host = q ? "" : w.length ? w.shift() : "";
                var j = !!(n.host && n.host.indexOf("@") > 0) && n.host.split("@");
                j && (n.auth = j.shift(), n.host = n.hostname = j.shift())
            }
            return b = b || n.host && w.length, b && !q && w.unshift(""), w.length ? n.pathname = w.join("/") : (n.pathname = null, n.path = null), l.isNull(n.pathname) && l.isNull(n.search) || (n.path = (n.pathname ? n.pathname : "") + (n.search ? n.search : "")), n.auth = e.auth || n.auth, n.slashes = n.slashes || e.slashes, n.href = n.format(), n
        }, r.prototype.parseHost = function () {
            var e = this.host, t = f.exec(e);
            t && (t = t[0], ":" !== t && (this.port = t.substr(1)), e = e.substr(0, e.length - t.length)), e && (this.hostname = e)
        }
    }, {"./util": 8, punycode: 3, querystring: 6}],
    8: [function (e, t, n) {
        "use strict";
        t.exports = {
            isString: function (e) {
                return "string" == typeof e
            }, isObject: function (e) {
                return "object" == typeof e && null !== e
            }, isNull: function (e) {
                return null === e
            }, isNullOrUndefined: function (e) {
                return null == e
            }
        }
    }, {}],
    9: [function (e, t, n) {
        function r(e) {
            var t = a(e.currentTarget).parent().find(".dropdown-menu");
            t.toggleClass("open"), e.stopPropagation(), e.preventDefault()
        }

        function o(e) {
            a(".dropdown-menu").removeClass("open")
        }

        function i() {
            a(document).on("click", ".toggle-dropdown", r), a(document).on("click", ".dropdown-menu", function (e) {
                e.stopPropagation()
            }), a(document).on("click", o)
        }

        var a = e("jquery");
        t.exports = {init: i}
    }, {jquery: 1}],
    10: [function (e, t, n) {
        function r() {
            s.init(), i.init(), o.init(), a.init(), u.createButton({
                index: 0,
                icon: "fa fa-align-justify",
                onClick: function (e) {
                    e.preventDefault(), s.toggle()
                }
            })
        }

        var o = e("./dropdown"), i = e("./keyboard"), a = e("./navigation"), s = e("./sidebar"), u = e("./toolbar"),
            l = window.gitbook;
        l.events.on("start", r), l.keyboard = i, l.navigation = a, l.sidebar = s, l.toolbar = u
    }, {"./dropdown": 9, "./keyboard": 11, "./navigation": 13, "./sidebar": 15, "./toolbar": 16}],
    11: [function (e, t, n) {
        function r(e, t) {
            i.bind(e, function (e) {
                return t(), !1
            })
        }

        function o() {
            r(["right"], function (e) {
                a.goNext()
            }), r(["left"], function (e) {
                a.goPrev()
            }), r(["s"], function (e) {
                s.toggle()
            })
        }

        var i = e("mousetrap"), a = e("./navigation"), s = e("./sidebar");
        t.exports = {init: o, bind: r}
    }, {"./navigation": 13, "./sidebar": 15, mousetrap: 2}],
    12: [function (e, t, n) {
        function r(e) {
            return o.state.$book.addClass("is-loading"), e.always(function () {
                o.state.$book.removeClass("is-loading")
            }), e
        }

        var o = window.gitbook;
        t.exports = {show: r}
    }, {}],
    13: [function (e, t, n) {
        function r() {
            return w(k.isSmallScreen() ? ".book-body" : ".body-inner")
        }

        function o(e) {
            var t = r(), n = 0;
            i(e) && (e && (n = a(e)), t.unbind("scroll"), t.animate({scrollTop: n}, 800, "swing", function () {
                t.scroll(l)
            }), s(null, e))
        }

        function i(e) {
            var t = r(), n = t.find(e);
            return !!n.length
        }

        function a(e) {
            var t = r(), n = t.find(".page-inner"), o = t.find(e), i = o.offsetParent(), a = 0;
            for (a = o.position().top; !i.is(n);)o = i, a += o.position().top, i = o.offsetParent();
            return Math.floor(a)
        }

        function s(e, t) {
            if (e || t || (e = b.first()), t && (e = b.length > 1 ? b.filter(function () {
                    var e = u(w(this));
                    return e == t
                }).first() : b.first()), !e.is(x)) {
                x = e, b.removeClass("active"), e.addClass("active"), t = u(e);
                var n = window.location.pathname + window.location.hash, r = window.location.pathname + t;
                r != n && history.replaceState({path: r}, null, r)
            }
        }

        function u(e) {
            var t = e.children("a"), n = t.attr("href").split("#")[1];
            return n && (n = "#" + n), n ? n : ""
        }

        function l() {
            var e = r(), t = e.scrollTop(), n = e.prop("scrollHeight"), o = e.prop("clientHeight"), i = b.length,
                l = null;
            w(b.get().reverse()).each(function (e) {
                var n, r = u(w(this));
                r && !l && (n = a(r), t >= n && (l = w(this))), e != i - 1 || l || (l = w(this))
            }), l || t || (l = b.first()), t && n - t == o && (l = b.last()), s(l)
        }

        function c(e, t) {
            var n = C.parse(N), r = C.resolve(window.location.pathname, e), i = C.parse(r), a = i.hash,
                s = i.pathname !== n.pathname, u = Boolean(i.hostname);
            if (!E || u)return void(location.href = e);
            if (!s)return t && history.pushState({path: r}, null, r), o(a);
            N = r;
            var l = w.Deferred(function (e) {
                w.ajax({
                    type: "GET",
                    url: r,
                    cache: !0,
                    headers: {"Access-Control-Expose-Headers": "X-Current-Location"},
                    success: function (n, i, s) {
                        var u = s.getResponseHeader("X-Current-Location") || r;
                        n = n.replace(/<(\/?)(html|head|body)([^>]*)>/gi, function (e, t, n, r) {
                            return "<" + t + "div" + (t ? "" : ' data-element="' + n + '"') + r + ">"
                        });
                        var l, c = w(n), f = c.find(".book");
                        if (0 === f.length) {
                            var h = new Error("Invalid gitbook page, redirecting...");
                            return e.reject(h)
                        }
                        t && history.pushState({path: u}, null, u), c = w(n), l = c.find("[data-element=head]"), f = c.find(".book"), document.title = l.find("title").text();
                        var d = w("head");
                        d.find("link[rel=prev]").remove(), d.find("link[rel=next]").remove(), d.append(l.find("link[rel=prev]")), d.append(l.find("link[rel=next]"));
                        var g = w(".book").attr("class"), m = w(".book-summary").scrollTop();
                        f.toggleClass("with-summary", w(".book").hasClass("with-summary")), w(".book").replaceWith(f), w(".book").attr("class", g), w(".book-summary").scrollTop(m), j.state.$book = w(".book"), p(!a), a && o(a), e.resolve()
                    }
                })
            }).promise();
            return T.show(l.fail(function (e) {
                console.log(e)
            }))
        }

        function f() {
            var e, t;
            e = parseInt(w(".body-inner").css("width"), 10), t = parseInt(w(".page-wrapper").css("width"), 10), w(".navigation-next").css("margin-right", e - t + "px");
            var n = r();
            n.unbind("scroll"), n.scroll(l)
        }

        function p(e) {
            var t = w(".book-body"), n = t.find(".body-inner"), o = n.find(".page-wrapper");
            f(), o.focus();
            var i = r();
            e !== !1 && i.scrollTop(0), b = w(".book-summary .summary .chapter").filter(function () {
                var e = w(this).children("a"), t = null;
                if (!e.length)return !1;
                t = e.attr("href").split("#")[0];
                var n = C.resolve(window.location.pathname, t);
                return window.location.pathname == n
            }), b.length > 1 ? i.scroll(l) : x = b.first()
        }

        function h(e) {
            return 0 === e.button
        }

        function d(e) {
            return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)
        }

        function g(e) {
            var t = w(this), n = t.attr("target");
            if (!d(e) && h(e) && !n) {
                e.stopPropagation(), e.preventDefault();
                var r = t.attr("href");
                r && c(r, !0)
            }
        }

        function m() {
            var e = w(".navigation-next").attr("href");
            e && c(e, !0)
        }

        function v() {
            var e = w(".navigation-prev").attr("href");
            e && c(e, !0)
        }

        function y() {
            w.ajaxSetup({cache: !1}), history.replaceState({path: window.location.href}, ""), window.onpopstate = function (e) {
                if (null !== e.state)return c(e.state.path, !1)
            }, w(document).on("click", ".navigation-prev", g), w(document).on("click", ".navigation-next", g), w(document).on("click", ".summary [data-path] a", g), w(document).on("click", ".page-inner a", g), w(window).resize(f), p(!1)
        }

        var b, x, w = e("jquery"), C = e("url"), T = e("./loading"), k = e("./platform"), j = window.gitbook,
            E = "undefined" != typeof history.pushState, N = location.href;
        t.exports = {init: y, goNext: m, goPrev: v}
    }, {"./loading": 12, "./platform": 14, jquery: 1, url: 7}],
    14: [function (e, t, n) {
        var r = e("jquery");
        t.exports = {
            isMobile: function () {
                return r(document).width() <= 600
            }, isSmallScreen: function () {
                return r(document).width() <= 1240
            }
        }
    }, {jquery: 1}],
    15: [function (e, t, n) {
        function r(e, t) {
            null != l.state && o() == e || (null == t && (t = !0), l.state.$book.toggleClass("without-animation", !t), l.state.$book.toggleClass("with-summary", e), l.storage.set("sidebar", o()))
        }

        function o() {
            return l.state.$book.hasClass("with-summary")
        }

        function i() {
            u.isMobile() || r(l.storage.get("sidebar", !0), !1), s(document).on("click", ".book-summary li.chapter a", function (e) {
                u.isMobile() && r(!1, !1)
            })
        }

        function a(e) {
            var t = s(".book-summary");
            t.find("li").each(function () {
                var t = s(this).data("path"), n = null == e || e.indexOf(t) !== -1;
                s(this).toggle(n), n && s(this).parents("li").show()
            })
        }

        var s = e("jquery"), u = e("./platform"), l = window.gitbook;
        t.exports = {init: i, isOpen: o, toggle: r, filter: a}
    }, {"./platform": 14, jquery: 1}],
    16: [function (e, t, n) {
        function r() {
            return "btn-" + g++
        }

        function o(e, t, n, r) {
            var o = e.children(t).length;
            n < 0 && (n = Math.max(0, o + 1 + n)), e.append(r), n < o && e.children(t).eq(n).before(e.children(t).last())
        }

        function i(e) {
            e.preventDefault()
        }

        function a(e) {
            var t = p("<div>", {
                class: "dropdown-menu",
                html: '<div class="dropdown-caret"><span class="caret-outer"></span><span class="caret-inner"></span></div>'
            });
            if ("string" == typeof e) t.append(e); else {
                var n = e.map(function (e) {
                    return p.isArray(e) ? e : [e]
                });
                n.forEach(function (e) {
                    var n = p("<div>", {class: "buttons"}), r = "size-" + e.length;
                    e.forEach(function (e) {
                        e = p.extend({text: "", className: "", onClick: i}, e || {});
                        var t = p("<button>", {class: "button " + r + " " + e.className, text: e.text});
                        t.click(e.onClick), n.append(t)
                    }), t.append(n)
                })
            }
            return t
        }

        function s(e) {
            return e = p.extend({
                label: "",
                icon: "",
                text: "",
                position: "left",
                className: "",
                onClick: i,
                dropdown: null,
                index: null,
                id: r()
            }, e || {}), d.push(e), u(e), e.id
        }

        function u(e) {
            var t, n = p(".book-header"), r = n.find("h1"), i = "pull-" + e.position,
                s = p("<a>", {class: "btn", text: e.text ? " " + e.text : "", "aria-label": e.label, href: "#"});
            if (s.click(e.onClick), e.icon && p("<i>", {class: e.icon}).prependTo(s), e.dropdown) {
                var u = p("<div>", {class: "dropdown " + i + " " + e.className});
                s.addClass("toggle-dropdown"), u.append(s);
                var l = a(e.dropdown);
                l.addClass("dropdown-" + ("right" == e.position ? "left" : "right")), u.append(l), t = u
            } else s.addClass(i), s.addClass(e.className), t = s;
            t.addClass("js-toolbar-action"), p.isNumeric(e.index) && e.index >= 0 ? o(n, ".btn, .dropdown, h1", e.index, t) : t.insertBefore(r)
        }

        function l() {
            p(".js-toolbar-action").remove(), d.forEach(u)
        }

        function c(e) {
            d = p.grep(d, function (t) {
                return t.id != e
            }), l()
        }

        function f(e) {
            d = p.grep(d, function (t) {
                return e.indexOf(t.id) == -1
            }), l()
        }

        var p = e("jquery"), h = window.gitbook, d = [], g = 0;
        h.events.on("page.change", function () {
            l()
        }), t.exports = {createButton: s, removeButton: c, removeButtons: f}
    }, {jquery: 1}]
}, {}, [10]);
